【问题标题】:How to resolve nested name specifier?如何解析嵌套名称说明符?
【发布时间】:2013-03-29 05:13:15
【问题描述】:

比如我有一个A.h头文件,里面有一个类声明,比如:

class A {
public:
    struct Node {
        int val;
    };
private:
    B* b;
};

它包含一个在 B.h 文件中定义的 B 类指针:

class B {
public:
    A::Node* node_new() { ***};
};

当我编译项目时,出现“嵌套名称说明符”错误。如何解决?

【问题讨论】:

  • 你不认为这会在两者之间创建一个永无止境的递归关系吗?
  • 有前向声明(A.h中B的decl,A.h中包含B.h)?
  • wtb .cpp 文件。我想你会需要一个。
  • @HankyPankyㇱ 是的,我知道。但是如何解决这个问题呢?
  • 在将前向声明 class B; 放在顶部、定义 node_new() { return new A::Node(); } 并实现简单的 int main() { B b; A::Node * an = b.node_new(); } 时编译对我来说很好 - 不会发生编译器错误。 (VS 2012)

标签: c++ class


【解决方案1】:

是的,A.h 包括#include"B.h",B.h 包括#include "A.h"

所以,这里是无限递归...您应该在A.h 文件中使用类B 的前向声明,并在B.h 中包含A.h,所以,这应该可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多