我正在做一个项目,每个头文件都有一个预处理器包含保护。我的包含是这样的:
(文件 -> 包括)
main.cpp -> header.h;字符.h
header.h -> 向量、iostream、...、DataFiles.h
Character.h -> DataFiles.h、header.h、CharFrame.h
CharFrame.h -> 数据文件.h, header.h
一切正常。但是,如果我只是删除 main.cpp 的 #include "Character.h" 以将其移动到 header.h 中,我会在编译时遇到很多错误。所以现在是:
main.cpp -> header.h
header.h -> ...,DataFiles.h,Character.h。
有什么不同?
这是我的编译器输出:
Inspiron-1545:~/Desktop/LF2_linux$ g++ -Wall main.cpp DataFiles.cpp header.cpp Character.cpp CharFrame.cpp -lSDL -lSDL_image -lSDL_ttf -o test
In file included from header.h:13:0,
from CharFrame.h:12,
from CharFrame.cpp:1:
Character.h:55:15: error: ‘CharFrame’ was not declared in this scope
Character.h:55:25: error: template argument 1 is invalid
Character.h:55:25: error: template argument 2 is invalid
如果将 include 放回 main.cpp 中,则它会编译而不会出现任何错误。
如果您觉得我的代码是必要的,我将编辑这篇文章并粘贴所有内容。
以下是感兴趣的行:
header.h:13 ->
#include "Character.h"
CharFrame.h:12 ->
#include "header.h"
CharFrame.cpp:1 ->
#include "CharFrame.h"
Character.h:55 ->
std::vector <CharFrame*> *frame;