2012-01-17 86 views
1

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 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()'。

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

回答

4
PlayingCard card1(); 

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

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

PlayingCard card1; 

这被称为Most Vexing Parse在C++中。
今天我第二次接电话。烦人的解析天似乎!

+0

呃哈哈非常感谢你,我现在用它.. – Holly 2012-01-17 11:44:05

1
PlayingCard card1(); 

这将导致不确定性,因为这可以作为函数原型与返回类型游戏牌和签名卡1与零个参数进行处理。你最好在card1之后删除(),然后看看。