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 ++没有适当的默认构造函数我迷路了的主要内容,如果未能解决你的问题,请参考以下文章

C ++模板类“没有适当的默认构造函数可用”

错误 C2512:没有适当的默认构造函数可用 - 为啥在构造函数中初始化属性?

c++没有合适的默认构造函数可用

显式默认构造函数的目的

编译器错误:没有合适的默认构造函数可用

没有适当的默认构造函数可用错误