我的问题:
有两个类(class),A 类和 B 类,所以我有 A.h 和 A.cpp 以及 B.h 和 B.cpp。 A 需要知道 B,B 需要知道 A。我通过以下方式解决了它(我不知道为什么必须这样......)
啊哈:
#include "B.h"
class A{ ...
A.cpp:
#include "A.h"
B.h:
#include "A.h"
class A; // forward declaration
class B { ...
B.cpp:
#include "B.h"
我使用了一个前向声明并且它有效。
问题是,这两个类都需要在命名空间“ui”中。或者至少我认为是这个意思:
啊哈:
#include "B.h"
namespace ui{
class A;
}
class A{ ...
B.h:
#include "A.h"
namespace ui{
class B;
}
class B{ ...
这不再起作用了。我现在需要做什么才能让它再次使用命名空间和前向声明?
两者都必须在此命名空间中。我正在使用 Qt 并且需要 "namespace ui{"等行。两个类(class)都需要相互了解。 我已经尝试过这样做:
namespace ui{
class A;
class B;
}
在两个标题中,但这不起作用...
顺便说一句:所有头文件也都有“ifndef”机制。
最佳答案
如果我没听错的话,你用这样的结构声明了 2 种不同的类型:
#include "B.h"
namespace ui{
class A;
}
class A{ ... };
这里你声明在命名空间ui
中有一个class A
,但是你在全局命名空间中定义了一个class A
。因此 ui::A
被声明但 从未 被定义。将 A
的定义也移动到 ui
命名空间:
#include "B.h"
namespace ui{
class A;
}
//somewhere later:
namespace ui
{
class A{ ... };
}
关于c++ - 前向声明和命名空间 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6445330/