在構建我的小C++項目時,我得到以下2個錯誤,無法找出原因:錯誤時向前聲明一個結構:「在這裏有一個先前的聲明」
錯誤:使用的typedef 'struct'之後的名字'TTF_Font'。
指向以下代碼行:struct TTF_Font;
in Foo.h.錯誤:'TTF_Font'在此處有一個前面的聲明。
指向SDL_ttf.h中的以下代碼行:typedef struct _TTF_Font TTF_Font;
。
我已經收窄到以下文件在一個新的測試項目:
了foo.h:
#ifndef FOO_H
#define FOO_H
struct TTF_Font;
class Foo
{
TTF_Font* font;
};
#endif // FOO_H
Foo.cpp中:
#include "Foo.h"
#include "SDL/SDL_ttf.h"
// No implementation, just testing
主要.cpp:
#include "Foo.h"
int main(int argc, const char* argv[])
{
Foo a;
return 0;
}
你們知道我在做什麼錯嗎?
我的目標是轉發聲明TTF_Font,所以我可以在我的頭文件中使用它,而不包括SDL_ttf頭文件。我讀過在其他頭文件中包含頭文件是一個不好的做法,所以我切換到前向聲明。除了這個單獨的結構外,我所有其他的前向聲明都能正常工作
當我用正文包括#include "SDL/SDL.ttf.h"
替換正向聲明struct TTF_Font;
時,它編譯時沒有錯誤。所以我可以使用它,但我想知道爲什麼,該死的:-)。
其他信息:我正在使用Code :: Blocks IDE和mingw32編譯器。項目使用SDL圖形庫。沒有太多的C++經驗,來自C#背景。
你確定你的`Foo.cpp`代碼片斷是正確的嗎?錯誤信息暗示``Foo.h`中的內容在包含`SDL_ttf.h`後發生*。 – 2011-02-12 10:45:38