C ++无法创建抽象类的实例

时间:2013-05-04 19:19:49

标签: c++ windows class compiler-construction

我有以下课程:

(标题)

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);
 };

2 个答案:

答案 0 :(得分:3)

CBaseStructure必须是抽象类。如果你想从它派生并且你想要一个非抽象类,那么你必须覆盖CBaseStructure声明的每个纯虚函数。显然你没有这样做。

修改

CBaseStructure有一个纯虚函数ProcessTxtLine。您的班级必须覆盖该职能。

您的代码中没有任何内容可以解释为什么您继承了CBaseStructure,它会为您做些什么?

答案 1 :(得分:0)

查看您的CBaseStructure,请注意以下protected纯虚函数声明:

virtual void ProcessTxtLine(string line) = 0;

任何具有纯虚函数的类都是抽象类,抽象类无法实例化(想一想为什么:它们没有任何代码来实现它们声称支持的某些函数)。

因此,抽象类是包含基类需要派生类提供实现的纯虚函数的类。

在您的情况下,您的clsMapping班级必须ProcessTxtLine提供实施。

那么如果你不这样做会发生什么?好吧,你的派生类“继承”一个它不会覆盖的纯虚函数,因此,它也成为一个抽象类。正如我们已经建立的那样,抽象类无法实例化。