【发布时间】:2017-03-10 10:59:50
【问题描述】:
因此,经过一些研究,我一直在努力为我的继承类提供单独的类头和源代码。以下示例是我的课程的缩短版本。我所有的头文件都包含守卫、默认构造函数和虚拟析构函数。它们还具有变量所需的 getter 和 setter 函数。我将主要只显示变量和包含。
编译器错误位于代码下方
主程序类:
MainProgram.h
#include "FileMgr.h"
#include "InfoMgr.h"
class FileMgr;
class InfoMgr;
class MainProgram
{
private:
FileMgr* fileMgr;
InfoMgr* infoMgr;
public:
.
.
.
}; // !MainProgram
MainProgram.cpp
#include "MainProgram.h"
#include <iostream>
MgrBase 类(基类):
MgrBase.h
#include "MainProgram.h"
#include <string>
class MainProgram;
class MgrBase
{
protected:
MainProgram* mainProgram;
MgrBase() : mainProgram(nullptr) {}
virtual ~MgrBase() {}
public:
virtual bool Init() = 0;
}; // !MgrBase
FileMgr 类:
文件管理器.h
#include "MgrBase.h"
class MainProgram;
class FileMgr : public MgrBase
{
public:
FileMgr(MainProgram* mainProgram);
.
.
.
};// !FileMgr
FileMgr.cpp
#include <iostream>
#include <string>
#include "FileMgr.h"
#include "MainProgram.h"
InfoMgr 类:
InfoMgr.h
#include <string>
#include "MgrBase.h"
class MainProgram;
class InfoMgr : public MgrBase
{
public:
InfoMgr(MainProgram* mainProgram);
.
.
.
}; //!InfoMgr
InfoMgr.cpp
#include <iostream>
#include "MainProgram.h"
#include "InfoMgr.h"
我的尝试和错误:
所以我尝试弄清楚类声明和包含,但我没有得到它。以现在的代码方式,我在类 InfoMgr 的“{”上收到此错误:public MgrBase:
error: expected class-name before ‘{’ token
如果我让 InfoMgr.h 看起来像
#include <string>
//Class Foward Declarations
class MainProgram;
class MgrBase;
和 InfoMgr.cpp 看起来像
#include <iostream>
#include "MainProgram.h"
#include "InfoMgr.h"
#include "MgrBase.h"
我在引用行类 InfoMgr 时收到此错误:public MgrBase
error: invalid use of incomplete type ‘class MgrBase’
如果我这样做了 InfoMgr.cpp 不包含 MgrBase 并使其 InfoMgr.h 看起来像这样:
#include <string>
#include "MgrBase.h"
//Class Forward Declarations
class MainProgram;
class MgrBase;
我在引用行类 InfoMgr 时收到此错误:public MgrBase
error: invalid use of incomplete type ‘class MgrBase’
【问题讨论】:
-
请创建一个minimal reproducible example,最好在一些在线编译器上,这样我们才能真正看到问题
-
我们不想要“更多”;我们想要一个 minimal 示例,如帮助中心和 Vittorio 给您的链接后面所述。代码太多了;你还没有缩小问题的范围。解构问题是我们工作中的一项关键技能,所以你会很高兴我们让你学会了它!
-
你也没有说在哪里你得到这些错误,你的代码文件不完整。
-
好吧,构造一个minimal reproducible example,如果构造一个不能告诉你问题是什么,那么我们可以继续。
-
它不是minimal reproducible example。请点击链接并阅读页面。我不只是故意迟钝-您必须学习如何解构问题,并且我正在尝试帮助您学习编写好的 SO 问题,以便您将来可以获得更好的帮助(以及更少的反对票,这将最终导致问题禁令!)
标签: c++ inheritance forward-declaration