小编Obs*_*Obs的帖子

前向声明和命名空间(c ++)

我的问题:

有两个班,A班和B班,所以我得到了Ah和A.cpp以及Bh和B.cpp.需要知道B和B需要知道A.我用以下方式解决了它(我不知道为什么它必须如此......)

啊:

#include "B.h"
class A{ ... 
Run Code Online (Sandbox Code Playgroud)

A.cpp:

#include "A.h"
Run Code Online (Sandbox Code Playgroud)

BH:

#include "A.h"
class A; // forward declaration
class B { ... 
Run Code Online (Sandbox Code Playgroud)

B.cpp:

#include "B.h"
Run Code Online (Sandbox Code Playgroud)

我使用了一个前向声明并且它有效.

问题是,两个类都需要在命名空间"ui"中.或者至少我认为这是意思:

啊:

#include "B.h"
namespace ui{
  class A;
}

class A{ ... 
Run Code Online (Sandbox Code Playgroud)

BH:

#include "A.h"
namespace ui{
  class B;
}

class B{ ... 
Run Code Online (Sandbox Code Playgroud)

这不再起作用了.现在我需要做些什么来使命名空间和前向声明再次起作用?

两者都必须在此命名空间中.我正在使用Qt,需要使用"namespace ui {"等行.两个班级都需要相互了解.我已经尝试过这样做:

namespace ui{
 class A;
 class B;
}
Run Code Online (Sandbox Code Playgroud)

在两个标题中,但这不起作用......

顺便说一句:所有Header-Files也获得了"ifndef"机制.

c++ namespaces forward-declaration

13
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×1

forward-declaration ×1

namespaces ×1