[英]Error: no appropriate default constructor available
即使我已经尝试了很多,但我不知道我的代码中的错误在哪里。 看起来就这么简单。
enum Suit { none, clubs, diamonds, hearts, spades };
enum Symbol { none_, ace, king, queen, jack, ten, nine, eight, seven };
class Card
{
private:
Suit suit_;
Symbol symbol_;
public:
Card(Suit suit, Symbol symbol)
{
suit_=suit;
symbol_=symbol;
};
您的类没有default constructor
。 这本身不是问题。 但是,如果您尝试调用不存在的default constructor
,则会显示错误。 你可能在其他地方做这样的事情(其中一行足以引发该错误):
Card x;
std::vector<Card> v(3);
auto x=std::make_shared<Card>();
//...and many others...
解决方案?
如果您真的不希望在没有给出参数的情况下分配Card
,则不应这样做。 找到尝试分配Card
对象并更改它的代码。 顺便说一句,最好在像这样的明确声明中delete
default constructor
:
class Card{
private:
Suit suit_;
Symbol symbol_;
public:
Card()=delete;
Card(Suit suit, Symbol symbol)
{
suit_=suit;
symbol_=symbol;
}
};
如果您可以使用默认值从Card
类分配对象,请添加以下内容:
class Card{
private:
Suit suit_;
Symbol symbol_;
public:
Card()=default;
//Or Card():suit_(some_value),symbol_(somevalue){}
Card(Suit suit, Symbol symbol)
{
suit_=suit;
symbol_=symbol;
}
};
您已经定义了自己的构造函数,在这种情况下,编译器不会添加默认构造函数。 今后,如果您尝试创建如下所述的对象,您最终将不会遇到默认构造函数错误
card obj;
// 错误
解决方案:
1)在创建对象时传递参数( Most appropriate
根据片段):
例子:
Suit suitenum = clubs;
Symbol symnum = king;
Card obj(suitenum,symnum);
2)定义一个默认构造函数:
class Card
{
private:
Suit suit_;
Symbol symbol_;
public:
Card(){};
Card(Suit suit, Symbol symbol)
{
suit_=suit;
symbol_=symbol;
};
};
简而言之,您只需要提供默认构造函数(无参数)即可。
Card()
{
}
您需要默认构造函数的原因是您正在使用这种类型的向量(容器)。 (班级)。 对于容器类,所包含的类(卡片)必须具有默认构造函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.