我收到此编译器错误
error: 'RawLog' does not name a type
以下是相关代码:
//DataAudit.h
#ifndef DATAAUDIT_H
#define DATAAUDIT_H
class RawLog;
class DataAudit
{
...
private:
RawLog* _createNewRawLog(); // This is the line indicated with the error
};
#endif // DATAAUDIT_H
通常,前向声明可以解决这种错误。该答案表明包含循环标头可能会导致此问题。但是不使用#ifndef
and#define
语句不会阻止循环标题包含吗?
还有其他原因我可能会看到此错误吗?
我可以使用哪些方法来进一步推断此错误的性质?
更新:这很奇怪。我有一个Globals.h
文件,如果我定义一个新enum
的 in Globals.h
,就会出现错误。然后,如果我注释掉enum
,错误就会消失。这让我认为循环依赖已经存在了一段时间,并且添加了enum
以某种方式重新排序编译单元,从而暴露了以前不存在的依赖?