我得到這個編譯器錯誤「不命名類型」錯誤,但類指針已經有前向聲明?
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
通常預先聲明解決了這樣那樣的錯誤。 This答案表示一個循環的頭文件包含可能會導致此問題。但是否使用#ifndef
和#define
語句防止循環標題包含?
是否有另一個原因,我可能會看到這個錯誤?
有什麼方法可以用來進一步推斷此錯誤的性質?
更新:這很奇怪。我有一個Globals.h
文件,如果我在Globals.h
中定義新的enum
,則會顯示錯誤。然後,如果我註釋掉enum
,錯誤消失。這導致我認爲循環依賴已經存在了一段時間,並且添加enum
以某種方式重新排序編譯單元,從而暴露之前沒有的依賴性?
您確定這確實是問題所在,並且您給了我們一個完整且可重複的示例嗎?如果是這樣,什麼編譯器,因爲g ++ 4.6.3編譯它很好[一旦我添加缺少分號並刪除...]。 –
你也在DataAudit的最後忘了';'。取決於如何包括這些可能會導致問題。 – Borgleader
@Borgleader啊,我的壞。分號在原代碼中。 –