c++中不同命名空间内类的循环依赖
Cyclic dependency for classes inside different namespaces C++
我有两个类:
A类和B类类A在命名空间Common::subnamespace1
下声明类B在命名空间Common::subnamespace2
下声明A类和B类都在Common命名空间下,但在不同的子命名空间下。
我的问题如下:
在B类头文件中包含A类是可以的但是在类A中包含类B头文件并在其中声明类B类型的成员会导致编译错误未定义类型'B'.
我已经尝试使用前向声明来避免循环依赖。但是仍然存在错误实际上,我很困惑我应该按照什么顺序使用包含物。
注:我没有发布代码,因为我只是想知道声明或包含彼此类的确切顺序或方法。
- 如果你使用其他类作为基类或成员变量,或者如果你在头文件中的内联函数(包括编译器生成的特殊成员)中使用它,你必须将其他类的定义
#include
到头文件中。 - 如果在函数声明中使用类作为函数参数或函数返回类型,或者使用指针或引用作为成员,则只需要向前声明。
- 如果你使用模板实例化类作为参数,它取决于模板和它的用途,是否需要类的定义。
对于你的例子,我假设B需要A的定义,而不是相反。你的头应该像这样:
A.h:
namespace Common {
namespace subnamespace2 {
class B;
}
namespace subnamespace1 {
class A {
void foo(subnamespace2::B& b); //reference, parameter -> fwd-decl
subnamespace2::B* pB; //pointer -> fwd-decl
};
}
}
B.h:
#include "A.h"
namespace Common {
namespace subnamespace2 {
class B {
subnamespace1::A a; //direct member -> def needed
void bar() {
a.foo(*this); //inline use -> def needed
}
};
}
}
相关文章:
- C++GTKMM gui循环依赖关系
- 如何在头文件中声明类模板(由于循环依赖关系)
- 如何在具有循环依赖的类中dynamic_cast?
- C++模板方法中的循环依赖关系
- 修复循环依赖项 c++17 标头
- 涉及全局对象的循环依赖C++
- 循环依赖,在继承类的情况下使用覆盖方法
- Wt::D bo 中的循环依赖关系
- 在包含窗口标头时难以解决循环依赖关系问题
- 解决循环依赖关系 c++ 的想法
- C++循环依赖关系,未声明的标识符
- C++ 中的循环依赖关系问题
- 错误 C2512 视觉C++(并且不是循环依赖项)
- CMake 外部和内部静态库的循环依赖关系
- 正在从继承中解析循环依赖项
- "std::shared_ptr"循环依赖关系是如何导致问题的
- 纯引用而不是weak_ptr来打破循环依赖关系
- "invalid use of incomplete type" .解决循环依赖关系
- 如何避免模板方法的循环依赖
- 循环依赖结构,使用前向声明时结构的错误重定义