编辑:好的我写了一个小测试程序来显示在这里。这是源代码。
main.cpp中:
#include "core.h"
Core core;
int main()
{
core.coreFunction();
}
core.h:
#ifndef CORE_H__
#define CORE_H__
#include "definitions.h"
#include "window.h"
class Core
{
public:
Window window;
void coreFunction()
{
window.windowFunction();
}
};
extern Core core;
#endif
definitions.h
#ifndef DEFINITIONS_H__
#define DEFINITIONS_H__
class Core;
class Window;
#endif
window.h中
#ifndef WINDOW_H__
#define WINDOW_H__
class Window
{
public:
void windowFunction()
{
core.coreFunction();
}
};
#endif
使用此测试程序,我得到以下错误: window.h(10):错误C2065:'core':未声明的标识符。我希望这能澄清我的问题。请忽略这些函数对于显示我所做的事情没有任何意义,因为我的原始代码是在此处发布的方式。
答案 0 :(得分:8)
您在“window.h
”行前加上extern Core core;
标题。尝试在class Window
标题的window.h
行之前添加该行:
<强> window.h中强>
#ifndef WINDOW_H__
#define WINDOW_H__
extern Core core;
class Window
{...}
您可以将core
移动为Core
类的静态成员,而不是将Core用作全局变量。这称为Singleton pattern。
<强>的main.cpp 强>
#include "core.h"
int main()
{
Core* core = Core::getInstance();
core->coreFunction();
}
<强> core.h 强>
#include "window.h"
class Core
{
public:
static Core* getInstance() { return &coreInstance; }
void someFunction();
private:
static Core coreInstance;
Window window;
};
<强> core.cpp 强>
#include "core.h"
Core Core::coreInstance;
void Core::someFunction()
{
window.doSomething();
}
<强> window.h中强>
class Window
{
void someFunction();
};
<强> window.cpp 强>
#include "window.h"
#include "core.h"
void Window::someFunction()
{
Core* core = Core::getInstance();
core->doSomething();
}
答案 1 :(得分:0)
我想我发现了你的问题。在定义头文件中,“Core”类被声明为“core”。请记住,上限会产生很大的不同。
答案 2 :(得分:0)
要么你忘了定义核心的默认构造函数,要么核心不能简单地默认构造(由于有一个基础或成员没有默认的构造函数。
要核心,请添加:
class Core {
Window window;
Core() {} //add this line
void someFunction()
{
window.doSomething();
}
}
到窗口,添加:
class Window
{
Window() {} //add this line
void someFunction()
{
core.doSomething();
}
}
如果其中任何一个编译失败,你就会把这个问题再解决一下
现在,错误消息已经澄清,我立即看到错误。 Window.h
需要定义Core core
,Core.h
需要定义Window
。解决方案是从get go开始建议vz0。将Window::someFunction
的定义移至window.cpp
(我觉得有必要向vz0道歉)