在C ++中设置构造函数默认值

Hol*_*lly 1 c++ constructor default most-vexing-parse

可能重复:
为什么使用一组空括号来调用不带参数的构造函数会出错?
构造对象和调用成员函数

最近,我对构造函数有了一些了解,但是今天,在设置构造函数参数的默认值时遇到了麻烦。

hpp文件中的构造函数声明如下所示:

class PlayingCard {
public:
    PlayingCard(int value = 0, int suit = 0); //default values supplied
Run Code Online (Sandbox Code Playgroud)

cpp文件中的定义如下所示:

PlayingCard::PlayingCard(int value, int suit) :  _faceValue(value), _suit(suit)
{}
Run Code Online (Sandbox Code Playgroud)

_faceValue并且_suit是PlayingCard的私人成员)当我像这样测试时:

PlayingCard card1();
PlayingCard card2(7, 1);

cout << "suit int value: " << card1.getSuit() <<
        " face value: " << card1.getFaceValue() << endl;
cout << "suit int value: " << card2.getSuit() <<
        " face value: " << card2.getFaceValue() << endl;
Run Code Online (Sandbox Code Playgroud)

如果我注释掉有关card1的代码,则card2可以正常工作。否则我得到错误: 请求'card1'中的成员'getSuit',它是非类类型'PlayingCard()'。

哪个必须意味着它不能识别没有参数的构造函数的使用?我究竟做错了什么?

Alo*_*ave 5

PlayingCard card1();
Run Code Online (Sandbox Code Playgroud)

不声明对象,而是声明函数。
它声明一个名为的函数card1,该函数不带任何参数并返回类型的对象PlayingCard

要声明一个对象,您应该执行以下操作:

PlayingCard card1;
Run Code Online (Sandbox Code Playgroud)

这在C ++中被称为Most Vexing Parse
我今天第二次回答。令人讨厌的解析一天!


归档时间:

查看次数:

4850 次

最近记录:

12 年,10 月 前