C ++:尚未声明

时间:2012-12-29 18:46:39

标签: c++

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

我使用以下代码获得以下错误:

错误:'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就好了。我唯一能想到的是“静态”导致问题。

2 个答案:

答案 0 :(得分:9)

用正向声明替换include

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

仅在必要时包含文件。

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

答案 1 :(得分:8)

如果你有两个包含彼此的标题,你最终会得到循环依赖,并且由于预处理器的工作方式,它意味着一个将在另一个之前定义。

要修复,我会避免在A.h中包含A.h,而只是转发声明:

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

然后你可以在B.cpp中加入A.h