gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:41:47 26 4
gpt4 key购买 nike

我的问题:

有两个类(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com