C++ 无法实例化 abstaract 类的子级
C++ Cannot instantiate abstaract class's child
我有一个抽象类Transaction,它包含两个正常的属性和方法,还有一个方法Behavior,我将其设为纯虚拟的,因此从Transaction继承的类可以自己实现它。
我的交易.h
class Transaction abstract{
protected:
...
public:
...
virtual void behavior() = 0;
};
我认为这应该是正确的。我有一个类Cow,我想从交易中继承它。
这就是我尝试的方式
class Cow : public Transaction {
public:
Cow(int p, Calendar* cal){
this->priority = p;
this->cal = cal;
}
void Behavior() {
...
do some stuff
...
}
};
问题是,每当我试图制作一个Cow类的对象时。它要么在Main.cpp中,要么在Cow::Behavior中(这基本上只是代码中的两个位置,我需要能够创建Cow的对象),我最终会出现以下错误。
error C2259: 'Cow' : cannot instantiate abstract class
这真的让我很困惑,因为我不是想实例化一个抽象类,而是想实例化从中继承的类。我确信这是基本的东西,但我似乎无法独自解决这个问题。
Btw。这就是我尝试创建Cow的新实例的方式。
Calendar *calendar = new Calendar();
calendar->push(0, new Cow(1, calendar));
其中方法Calendar::Push接受
void Calendar::push(int t, Transaction *tr)
有什么想法吗?
谢谢!
您在基类中声明了一个纯虚拟函数behavior
,在派生类中声明了不相关的函数Behavior
。这不会覆盖纯函数,因为它有一个不同的名称。C++区分大小写。
C++区分大小写。您在基类中使用小写字母"b"拼写behavior,在派生类中使用behavior。
由于您没有覆盖类Cow中的纯虚拟函数行为[行为被视为不同的函数],因此Cow也成为了一个抽象类。其余部分是C++语义。
首先,C++没有关键字抽象。您似乎在使用C++/CLI。尝试以下定义
ref class Transaction abstract{
protected:
...
public:
...
virtual void behavior() = 0;
};
ref class Cow : public Transaction {
public:
Cow(int p, Calendar* cal){
this->priority = p;
this->cal = cal;
}
void behavior() override {
...
do some stuff
...
}
};
相关文章:
- 从C++实例化QML
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 约束和显式模板实例化
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 静态数据成员模板专用化的实例化点在哪里
- 错误的cv::face FacemarkLBF实例化
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?
- 检查某些类型是否是模板类 std::optional 的实例化
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 模板化类构造函数的模板实例化
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 受约束的成员函数和显式模板实例化
- 对显式实例化的模板函数的未定义引用
- C++ 无法实例化 abstaract 类的子级