1

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

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

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 的私人成员)当我像这样进行测试时:

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;

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

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

4

2 回答 2

5
PlayingCard card1();

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

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

PlayingCard card1;

这被称为C++ 中最令人烦恼的解析
我今天第二次回答这个问题。似乎是令人烦恼的 Parse 日子!

于 2012-01-17T11:32:57.237 回答
1
PlayingCard card1();

这会产生歧义,因为可以将其视为具有返回类型 PlayingCard 和具有零参数的签名 card1 的函数原型。最好删除 card1 后的 () 并查看。

于 2012-01-17T11:36:43.963 回答