我正在研究一个项目,每个头文件都有一个预处理器包括后卫.我的包含是这样的:
(文件 - >包括)
main.cpp - > header.h; Character.h
header.h - > vector,iostream,...,DataFiles.h
Character.h - > DataFiles.h,header.h,CharFrame.h
CharFrame.h - > DataFiles.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
Run Code Online (Sandbox Code Playgroud)
如果include被放回main.cpp,那么它编译时没有任何错误.
如果您觉得我的代码是必要的,我将编辑此帖并粘贴所有内容.
以下是感兴趣的行: …
我在php页面中画了一个棋盘.每件都设置为可拖动,每个瓷砖都可以放置.一旦一块被放在一块瓷砖上,我想重新加载php页面,这样就可以重新绘制新的位置.我该怎么做:用javascript重新加载php页面,而不显示要求确认的窗口,例如"要显示此页面,Firefox必须发送将重复之前执行的任何操作(如搜索或订单确认)的信息. - >取消;重新发送"?
或许还有更好的解决方案?
你好,我在使用前向声明时遇到了麻烦.我无法访问转发的类函数,但我需要这样做.
这是我的Window.h:
#include "Tab.h" // Needed because Window will create new Tabs
class Window {
public:
...
void doSome();
};
Run Code Online (Sandbox Code Playgroud)
这是Tab.h:
class Window; // forward delcaration
class Tab {
public:
class Tab(Window *parent);
void callParentFunction();
private:
Window *m_parent;
};
Run Code Online (Sandbox Code Playgroud)
最后,Tab.cpp:
#include "Tab.h"
Tab::Tab(Window *parent) {
m_parent = parent;
}
Tab::callParentFunction() {
m_parent->doSome(); // Error
}
Run Code Online (Sandbox Code Playgroud)
编译器返回以下错误:无效使用不完整类型'struct Window'
如何知道它已经包含Tab.h来创建标签,我如何访问父节点的功能?如果我不能,你建议我做什么?