即使我已经尝试了很多,但我不知道我的代码中的错误。这看起来很简单。
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;
};
答案 0 :(得分:0)
您的班级没有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;
}
};
答案 1 :(得分:0)
您已经定义了自己的构造函数,在这种情况下,编译器不会添加默认构造函数。从此以后,如果您尝试创建如下所述的对象,您将最终没有默认构造函数错误
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;
};
};
答案 2 :(得分:0)
要简短而简单,只需提供默认构造函数(无参数)即可。
Card()
{
}
您需要默认构造函数的原因是您正在使用此类型的向量(容器)。 (类)。对于容器类,包含的类(卡)必须具有默认构造函数。