C++外部类声明

roo*_*han 4 c++

编辑:好的我写了一个小测试程序来显示在这里.这是源代码.

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':未声明的标识符.我希望这能澄清我的问题.请忽略这些函数对于显示我所做的事情没有任何意义,因为我的原始代码是在此处发布的方式.

vz0*_*vz0 8

window.h在" extern Core core;"行之前包含标题.尝试class Windowwindow.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)