【发布时间】:2011-02-12 10:42:48
【问题描述】:
在构建我的小型 C++ 项目时,出现以下 2 个错误,无法找出原因:
错误:在 'struct' 之后使用 typedef-name 'TTF_Font'。
指向以下代码行:Foo.h 中的struct TTF_Font;。错误:“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
Main.cpp:
#include "Foo.h"
int main(int argc, const char* argv[])
{
Foo a;
return 0;
}
你们知道我做错了什么吗?
我的目标是转发声明 TTF_Font,这样我就可以在我的头文件中使用它而不包括 SDL_ttf 头文件。我读到在其他头文件中包含头文件是一种不好的做法,所以我切换到前向声明。除了这个单一的结构之外,我所有的其他前向声明都可以正常工作。
当我将前向声明 struct TTF_Font; 替换为包含 #include "SDL/SDL.ttf.h" 的标头时,它编译时不会出错。所以我可以使用它,但我想知道为什么,该死:-)。
额外信息:我正在使用带有 mingw32 编译器的 Code::Blocks IDE。项目使用 SDL 图形库。还没有多少C++经验,来自C#背景。
【问题讨论】:
-
您确定
Foo.cpp的代码sn-p 正确吗?错误消息暗示Foo.h中的内容发生在 包含SDL_ttf.h之后。
标签: c++