我是C++新手,无法解决我遇到的这个错误。我创建了一个Card类,它将花色和排名存储为无符号整数。我还有一个Maingame类,它运行多个函数。我想在Maingame类中创建5个Card对象,但我在初始化它们时遇到了问题。我的Card类是这样的。
class Card
{
public:
Card(unsigned int s, unsigned int r);
private:
unsigned int _suit;
unsigned int _rank;
};
和Card()的构造函数
Card::Card(unsigned int s, unsigned int r) {
_suit = s;
_rank = r;
}
在Maingame类中创建Card对象
class Maingame
{
public:
Maingame();
void run();
void out();
private:
Card card1;
};
Maingame的构造函数
Maingame::Maingame() {
card1(DIAMONDS, THREE);
}
这就是我得到错误“调用类类型的对象时没有适当的operator()或转换为指向函数的指针类型”的地方
2条答案
按热度按时间e5nqia271#
您的语法错误。您似乎正在尝试 * 初始化列表 *,这是语法
如果你有一个以上的项目要初始化,那么你会分开他们与逗号。
k10s72fa2#
在您的
Maingame
类中,card1
类成员是在输入Maingame()
构造函数的 body 之前构造的。Maingame()
的 body 试图对已经构造的card1
对象调用operator()
调用,该对象没有定义这样的运算符,因此出现错误。此外,由于
card1
类成员未在Maingame()
构造函数的member initializer list中 * 显式地 * 初始化,因此编译器将默认构造card1
类成员,这也将失败,因为Card
未定义default constructor。Card
定义了接受2个输入值的自定义构造函数,因此编译器生成的默认构造函数被禁用,并且Card
没有显式定义单独的默认构造函数。因此,此代码:
更像是这样写的:
要解决这两个问题,您需要在
Maingame()
构造函数的member initializer list中显式初始化Maingame
的card1
成员,这将允许您将输入值传递给card1
的构造函数,例如: