我有以下课程:
(标题)
struct udtMapping
{
int ByteStart;
int ByteCount;
int iHPUnitID;
};
class clsMapping : public CBaseStructure
{
private:
vector<udtMapping> m_content;
protected:
public:
vector<udtMapping> &Content();
void Add(int i1, int i2, int int3);
};
cpp文件:
vector<udtMapping> &clsMapping::Content()
{
return m_content;
}
void clsMapping::Add(int i1, int i2,int i3)
{
udtMapping n;
n.ByteStart = i1;
n.ByteCount = i2;
n.iHPUnitID = i3;
m_content.push_back(n);
return;
}
现在我想通过说
来使用这个课程clsMapping nMapping;
但编译器告诉我“无法从抽象类创建实例”。
我不确定我哪里出错了。 谢谢你的帮助。
编辑:根据要求,这里是CBaseStructure
class CBaseStructure
{
protected:
virtual void ProcessTxtLine(string line) = 0;
virtual void AfterLoad();
virtual string CompactLine(string line);
public:
void Load(string file);
void Load2(string file);
void Load3(string file);
};
答案 0 :(得分:3)
CBaseStructure必须是抽象类。如果你想从它派生并且你想要一个非抽象类,那么你必须覆盖CBaseStructure声明的每个纯虚函数。显然你没有这样做。
修改强>
CBaseStructure有一个纯虚函数ProcessTxtLine
。您的班级必须覆盖该职能。
您的代码中没有任何内容可以解释为什么您继承了CBaseStructure,它会为您做些什么?
答案 1 :(得分:0)
查看您的CBaseStructure
,请注意以下protected
纯虚函数声明:
virtual void ProcessTxtLine(string line) = 0;
任何具有纯虚函数的类都是抽象类,抽象类无法实例化(想一想为什么:它们没有任何代码来实现它们声称支持的某些函数)。
因此,抽象类是包含基类需要派生类提供实现的纯虚函数的类。
在您的情况下,您的clsMapping
班级必须为ProcessTxtLine
提供实施。
那么如果你不这样做会发生什么?好吧,你的派生类“继承”一个它不会覆盖的纯虚函数,因此,它也成为一个抽象类。正如我们已经建立的那样,抽象类无法实例化。