编辑:好的我写了一个小测试程序来显示在这里.这是源代码.
main.cpp中:
#include "core.h"
Core core;
int main()
{
core.coreFunction();
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
definitions.h
#ifndef DEFINITIONS_H__
#define DEFINITIONS_H__
class Core;
class Window;
#endif
Run Code Online (Sandbox Code Playgroud)
在window.h
#ifndef WINDOW_H__
#define WINDOW_H__
class Window
{
public:
void windowFunction()
{
core.coreFunction();
}
};
#endif
Run Code Online (Sandbox Code Playgroud)
使用此测试程序,我得到以下错误:window.h(10):错误C2065:'core':未声明的标识符.我希望这能澄清我的问题.请忽略这些函数对于显示我所做的事情没有任何意义,因为我的原始代码是在此处发布的方式.
您window.h在" extern Core core;"行之前包含标题.尝试class Window在window.h标题的行之前添加该行:
在window.h
#ifndef WINDOW_H__
#define WINDOW_H__
extern Core core;
class Window
{...}
Run Code Online (Sandbox Code Playgroud)
您可以将其core作为类的静态成员移动,而不是将Core用作全局变量Core.这称为Singleton模式.
main.cpp中
#include "core.h"
int main()
{
Core* core = Core::getInstance();
core->coreFunction();
}
Run Code Online (Sandbox Code Playgroud)
core.h
#include "window.h"
class Core
{
public:
static Core* getInstance() { return &coreInstance; }
void someFunction();
private:
static Core coreInstance;
Window window;
};
Run Code Online (Sandbox Code Playgroud)
core.cpp
#include "core.h"
Core Core::coreInstance;
void Core::someFunction()
{
window.doSomething();
}
Run Code Online (Sandbox Code Playgroud)
在window.h
class Window
{
void someFunction();
};
Run Code Online (Sandbox Code Playgroud)
window.cpp
#include "window.h"
#include "core.h"
void Window::someFunction()
{
Core* core = Core::getInstance();
core->doSomething();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51048 次 |
| 最近记录: |