C ++没有适当的默认构造函数我迷路了
Posted
技术标签:
【中文标题】C ++没有适当的默认构造函数我迷路了【英文标题】:C++ No Appropriate Default Constructor I am lost 【发布时间】:2019-10-03 02:01:52 【问题描述】:我遇到了一个涉及多态性的问题。我的代码一直告诉我,在这种情况下,我的类没有默认构造函数,我将其命名为 creative,尽管我确实实例化了一个在 bio 类中接受字符串的构造函数。我有一种感觉,我在这里遗漏了一些非常小的东西,并希望有人能帮助我解决这个问题。代码如下。
class Creature
public:
Creature(string);
virtual void DoAction() = 0;
virtual void DrawOnScreen() = 0;
protected:
string CreatureName;
;
Creature::Creature(string pname)
this->CreatureName = pname;
;
class Monster : public Creature
Monster(string CreatureName);
void DoAction();
protected:
string CreatureName;
;
Monster::Monster(string pname)
this->CreatureName = pname;
;
class Player : public Creature
Player(string CreatureName);
void DoAction();
protected:
string CreatureName;
;
Player::Player(string pname)
this->CreatureName = pname;
class WildPig : public Creature
WildPig(string CreatureName);
void DoAction();
protected:
string CreatureName;
;
WildPig::WildPig(string pname)
this->CreatureName = pname;
class Dragon : public Creature
Dragon(string CreatureName);
void DoAction();
protected:
string CreatureName;
;
Dragon::Dragon(string pname)
this->CreatureName = pname;
我只在这个 sn-p 中包含了这些类,以使其简短并专注于我认为问题所在的位置。任何帮助将不胜感激。
【问题讨论】:
您的子类构造函数应该使用string
参数调用父类构造函数。 Monster(string pname) : Creature(pname)
你说“即使”,但你没有提到矛盾。您定义了一个带参数的构造函数。没有不带参数的构造函数(也就是默认构造函数)。
派生类不需要string CreatureName;
,因为它已经从基类继承。
【参考方案1】:
Monster::Monster(string pname)
this->CreatureName = pname;
等价于
Monster::Monster(string pname) : Creature()
this->CreatureName = pname;
而Creature
没有默认构造函数。你需要:
Monster::Monster(string pname) : Creature(pname)
【讨论】:
以上是关于C ++没有适当的默认构造函数我迷路了的主要内容,如果未能解决你的问题,请参考以下文章