在构建我的小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