C++:未声明

5

我经常在各个地方看到这种错误,尽管我已经查看了答案,但似乎没有帮助。

我在以下代码中得到以下错误:

错误:'A'未被声明

B.h:

#include "A.h"
class B{
    public:
         static bool doX(A *a);
};

A.h:

include "B.h"
class A{};

要运行已经尝试过的检查清单: - 名称拼写正确 - A 在 A.h 中 - 没有名称空间 - 没有模板 - 没有宏
我有其他类可以轻松找到 A。我能想到的唯一问题就是 'static' 引起了问题。

3
A.h 包含 B.h 吗?(不应该包含)。 - Pubby
啊- 是的,看起来是这样。 - aoi
2个回答

9

include替换为前向声明:

//B.h
class A;
class B{
    public:
         static bool doX(A *a);
};

只有在必要时才使用include文件。

此外,使用include guards。这将防止其他讨厌的问题,例如重新定义等。


9
如果有两个头文件互相包含,就会形成循环依赖。由于预处理器的工作方式,这意味着其中一个头文件将在另一个之前被定义。
为了解决这个问题,我建议避免在B.h中包含A.h,而是使用前置声明:
class A;
class B{
    public:
         static bool doX(A *a);
};

你可以在B.cpp中引入A.h。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接