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

标签 c++ constructor default most-vexing-parse

<分区>

Possible Duplicate:
Why is it an error to use an empty set of brackets to call a constructor with no arguments?
Constructing Objects and Calling Member functions

最近我学到了一些关于构造函数的知识,但今天我在为构造函数参数设置默认值时遇到了问题。

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

class PlayingCard {
public:
    PlayingCard(int value = 0, int suit = 0); //default values supplied

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

PlayingCard::PlayingCard(int value, int suit) :  _faceValue(value), _suit(suit)
{}

(_faceValue_suit 是 PlayingCard 的私有(private)成员) 当我这样测试时:

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;

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

这一定意味着它不能识别不带参数的构造函数的使用?我做错了什么?

最佳答案

PlayingCard card1();

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

要声明一个对象,你应该这样做:

PlayingCard card1;

这被称为 Most Vexing Parse 在 C++ 中。
我今天第二次回答这个问题。令人烦恼的 Parse 日似乎!

关于c++ - 在 C++ 中设置构造函数默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8893881/

相关文章:

c++ - 错误 : no matching function for call

rust - Rust-混合使用默认宏和个人默认实现

c++ - 在 for 循环中初始化的变量是否每次迭代都会重置?

c++ - 如果没有找到 map 元素会返回什么?

c++ - 显式默认构造函数做什么?

c++ - 同一对象(由内存地址推导)构造两次而没有破坏

css - Angular Material 按钮移除自动对焦

Delphi:DBGrid选项未保存?

c++ - 使用 libjpeg 编写 o 缓冲区的更多帮助

c++ - 连接失败时是否需要 mysql_close?