1

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

这是我的第二堂课的一般情况:

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;

我在哪里错了?

头等舱.h

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

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

2 回答 2

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

活生生的例子

于 2013-08-21T09:47:48.683 回答
-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;
}
于 2013-08-21T10:00:45.357 回答