C++ 为什么不是';tc++;多个头文件和源文件中的继承是否有效?
因此,经过一些研究,我一直在努力为我的继承类提供单独的类头和源代码。以下示例是我的类的缩短版本。我所有的头文件都包含保护、默认构造函数和虚拟析构函数。它们还具有变量所需的getter和setter函数。我将主要展示变量和包含项 编译器错误位于代码下方的底部C++ 为什么不是';tc++;多个头文件和源文件中的继承是否有效?,c++,inheritance,forward-declaration,C++,Inheritance,Forward Declaration,因此,经过一些研究,我一直在努力为我的继承类提供单独的类头和源代码。以下示例是我的类的缩短版本。我所有的头文件都包含保护、默认构造函数和虚拟析构函数。它们还具有变量所需的getter和setter函数。我将主要展示变量和包含项 编译器错误位于代码下方的底部 主程序类: MainProgram.h #include "FileMgr.h" #include "InfoMgr.h" class FileMgr; class InfoMgr; class MainProgram { privat
主程序类: MainProgram.h
#include "FileMgr.h"
#include "InfoMgr.h"
class FileMgr;
class InfoMgr;
class MainProgram
{
private:
FileMgr* fileMgr;
InfoMgr* infoMgr;
public:
.
.
.
}; // !MainProgram
#include "MainProgram.h"
#include <string>
class MainProgram;
class MgrBase
{
protected:
MainProgram* mainProgram;
MgrBase() : mainProgram(nullptr) {}
virtual ~MgrBase() {}
public:
virtual bool Init() = 0;
}; // !MgrBase
#include "MgrBase.h"
class MainProgram;
class FileMgr : public MgrBase
{
public:
FileMgr(MainProgram* mainProgram);
.
.
.
};// !FileMgr
#include <string>
#include "MgrBase.h"
class MainProgram;
class InfoMgr : public MgrBase
{
public:
InfoMgr(MainProgram* mainProgram);
.
.
.
}; //!InfoMgr
MainProgram.cpp
#include "MainProgram.h"
#include <iostream>
#include <iostream>
#include <string>
#include "FileMgr.h"
#include "MainProgram.h"
#include <iostream>
#include "MainProgram.h"
#include "InfoMgr.h"
FileMgr.cpp
#include "MainProgram.h"
#include <iostream>
#include <iostream>
#include <string>
#include "FileMgr.h"
#include "MainProgram.h"
#include <iostream>
#include "MainProgram.h"
#include "InfoMgr.h"
如果我让InfoMgr.h看起来像
#include <string>
//Class Foward Declarations
class MainProgram;
class MgrBase;
如果我使InfoMgr.cpp不包含MgrBase,并使InfoMgr.h如下所示:
#include <string>
#include "MgrBase.h"
//Class Forward Declarations
class MainProgram;
class MgrBase;
标题中包含一个循环:
包括MainProgram.h
FileMgr.h
包括FileMgr.h
MgrBase.h
包括MgrBase.h
MainProgram.h
X
的引用或指针,则向前声明X
,而不包括定义它的头文件。如果您正在声明(而不是定义)一个具有类型为X
的参数或返回值的函数,则同样适用
如果要访问X
的成员或定义从X
派生的类,则只需包含X
的完整定义
就你而言:
- 将两个
语句从#include
移动到MainProgram.h
MainProgram.cpp
- 从
MgrBase.h
error: invalid use of incomplete type ‘class MgrBase’