'无法实例化抽象类',尽管类不应该是抽象的

时间:2013-08-21 09:32:24

标签: c++ abstract-class

所以我有两节课。一个人只有纯虚函数。其他实现这些功能并从第一类派生。 我知道我无法实例化第一堂课。但是当我尝试创建第二个类的对象时,它也会失败。

这就是我的第二堂课的概况:

class SecondClass  : public FirstClass
{
public:
     SecondClass();
virtual ~SecondClass(void);

void Foo();
void Bar();

}

实现:

SecondClass::SecondClass()
{...}
SecondClass::~SecondClass(void)
{...}
void SecondClass::Foo()
{...}
void SecondClass::Bar()
{...}

这是我如何实例化它并获得错误:

SecondClass mSecClass;

我在哪里错了?

FirstClass.h

class FirstClass
{
public:
  FirstClass(void);
  virtual ~FirstClass(void);

  virtual void Foo() = 0;
  virtual void Bar() = 0;
};

2 个答案:

答案 0 :(得分:0)

您需要定义~FirstClass()析构函数并省略其构造函数

class FirstClass
{
public:
  virtual ~FirstClass(void) {} // or use C++11 = default syntax

  virtual void Foo() = 0;
  virtual void Bar() = 0;
};

class SecondClass  : public FirstClass
{
public:
     SecondClass();
virtual ~SecondClass(void);

void Foo();
void Bar();

};

SecondClass::SecondClass() {}
SecondClass::~SecondClass(void) {}
void SecondClass::Foo() {}
void SecondClass::Bar() {}

int main()
{
        SecondClass mSecClass;
}

Live Example

答案 1 :(得分:-2)

定义您声明的每个函数,纯虚拟除外(virtual void foo()= 0)。 尝试下面的代码:

#include<iostream>

using namespace std;

class FirstClass
{
public:
    FirstClass()
    {
        //
    }
    virtual ~FirstClass();
    virtual void Foo();
    virtual void Bar();
};
    FirstClass::~FirstClass()
    {
        //
    }
    void FirstClass::Foo()
    {
        //
    }
    void FirstClass::Bar()
    {
        //
    }




class SecondClass  : public FirstClass
{
public:
     SecondClass();
virtual ~SecondClass(void);

void Foo();
void Bar();

};

SecondClass::SecondClass(){
//
}
SecondClass::~SecondClass(void)
{//
}
void SecondClass::Foo()
{//
}
void SecondClass::Bar()
{//
}

int main()
{
    SecondClass name;
    return 0;
}