Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;无法实例化Abstract类';孩子_C++_Inheritance_Abstract Class - Fatal编程技术网

C++ C++;无法实例化Abstract类';孩子

C++ C++;无法实例化Abstract类';孩子,c++,inheritance,abstract-class,C++,Inheritance,Abstract Class,我有一个抽象类事务,它包含两个普通属性和方法,还有一个方法-行为-我将其设置为纯虚拟的,因此从事务继承的类可以自己实现它 我的交易 class Transaction abstract{ protected: ... public: ... virtual void behavior() = 0; }) 我认为这应该是正确的。我有一个Cow类,我想从事务继承它 我就是这样做的 class Cow : public Transaction { public:

我有一个抽象类事务,它包含两个普通属性和方法,还有一个方法-行为-我将其设置为纯虚拟的,因此从事务继承的类可以自己实现它

我的交易

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
这让我很困惑,因为我不是要实例化一个抽象类,而是从它继承的类。我相信这是基本的东西,但我似乎无法独自解决这个问题

顺便说一句,这就是我如何尝试创建新的Cow实例

    Calendar *calendar = new Calendar();
calendar->push(0, new Cow(1, calendar));
方法Calendar::Push接受

void Calendar::push(int t, Transaction *tr)
有什么想法吗


谢谢大家!

C++区分大小写。您在基类中用小写字母“b”拼写行为,在派生类中用小写字母“b”拼写行为。

您在基类中声明了纯虚函数
行为
,在派生类中声明了不相关的函数
行为
。这不会覆盖纯函数,因为它有不同的名称。C++是区分大小写的。

因为您没有重写类Box中的纯虚函数行为(行为被视为不同函数),所以BoW也变成抽象类。REST是C++语义,

< P>首先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++之前,C++还具有“<代码> > /Cult>说明符,以捕获这些键入之前:-谢谢迈克。天哪,我真蠢,对不起,我完全忽略了你的时间。