当前位置: 首页 > 知识库问答 >
问题:

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

后烨煜
2023-03-14

所以我有两个类。一个只有纯粹的虚拟函数。另一个实现了这些函数,并从第一个类派生出来。我知道我不能实例化第一个类。但是当我试图创建第二个类的对象时,它也失败了。

我的第二节课大体上是这样的:

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;

我哪里做错了?

第一课

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

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

共有2个答案

诸修伟
2023-03-14

定义您声明的每个函数,除了纯虚拟函数(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;
}
梁丘钊
2023-03-14

您需要定义~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;
}

活生生的例子。

 类似资料:
  • 问题内容: 我创建了一个空的抽象类,并从中继承了该类: 我期望输出是 但是,我得到的是 如果我删除(这样就变成一个普通的类)和/或如果我设置了其他值,问题(显然)就消失了。 这里发生了什么? 问题答案: 这实际上不是ABC的问题,而是PyMongo的问题。有一个关于它的问题在这里。似乎pymongo重写以返回某种数据库类。这意味着将返回一个数据库对象,该对象在布尔上下文中为true。这使ABCMe

  • 我查过了,发现最接近的是这个,除了我没有任何向前的声明。我在基类中只有一个纯虚函数,我在子类中实现它,如下所示: 命令H 命令cpp 数字H 数字cpp 发生文件错误: 一个dd.cpp 添加H

  • 这个问题的答案是“使用python的abc模块创建抽象类”。(作者@AlexVassel,并被接受为答案)。 我尝试了这些建议,但奇怪的是,尽管遵循了使用方式的建议,但它对我不起作用。因此,我把它作为一个问题贴在这里: 那么我做的对还是错呢?为什么工作而不失败?欣赏任何专家对此的洞察力。

  • 第一次来这里。我是C新手,花了好几个小时想弄明白这个问题。很抱歉问一个似乎很常见的问题。我一生都找不到答案。 我在visual studio中遇到以下编译错误: 我的理解是,这意味着我创建的纯虚拟函数尚未在子类中实现。据我所见,它已在intNode子节点中实现。我做错了什么?代码如下。提前谢谢! 在节点中。h: 在Node.cpp: 编辑...对不起,我忘了添加这个位。错误指向main中的此部分

  • 问题内容: 我得到了几种解释,但是到目前为止,我还无法理解Java中的抽象类和方法是什么。 有人说它必须与程序的安全性做些关系,另一些人说不是那样。 即使从Dietel&Dietel的书中,我也不明白它的目的。我们何时,何地,为什么使用它? 请像您正在教初学者一样进行解释,非常感谢您的帮助。 问题答案: 抽象类是无法实例化的类。唯一的目的是扩展其他类。 抽象方法是抽象类中的方法(必须声明为抽象),

  • 问题内容: 最近,在一次采访中,有人问我一个非常笼统的问题:“ java中的抽象是什么”。我给出了定义,接着是关于抽象的其他问题,即什么是抽象方法以及抽象方法与具体方法之间的区别等。最后面试官要求我提供一个实时示例,说明我应该使用或将类定义为抽象类。我感到困惑。我给出了一些示例,但他没有被说服。 我用谷歌搜索,但没有找到真正的解决方案。 因此有人可以给我实时示例,即当他/她的项目中将类定义为抽象时