我到处都看到过这种类型的错误,虽然我已经查看了答案,但似乎没有任何帮助。
我使用以下代码获得以下错误:
错误:'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就好了。我唯一能想到的是“静态”导致问题。
答案 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