5

我到处都看到过这种类型的错误,虽然我看过答案,但似乎没有任何帮助。

我收到以下代码的以下错误:

错误:“A”尚未声明

乙:

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

啊:

include "B.h"
class A{};

列出我已经尝试过的事情的清单: - 名称拼写正确 - A 在 Ah - 没有命名空间 - 没有模板 - 没有宏

我有其他班级可以找到A就好了。我唯一能想到的是“静态”导致了问题。

4

2 回答 2

9

include用前向声明替换:

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

仅在必要时才包含文件。

此外,使用包括警卫。这将防止其他令人讨厌的问题,例如重新定义等。

于 2012-12-29T18:50:24.457 回答
9

如果您有两个相互包含的标头,您最终会产生循环依赖,并且由于预处理器的工作方式,这意味着一个将在另一个之前定义。

为了解决这个问题,我会避免在 Bh 中包含 Ah,而只是转发声明:

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

然后您可以在 B.cpp 中包含 Ah

于 2012-12-29T18:50:35.890 回答