2012-01-17 2 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(); 

개체를 선언하지 않으면 함수를 선언합니다.
매개 변수를 사용하지 않고 PlayingCard 유형의 개체를 반환하는 card1이라는 함수를 선언합니다.

PlayingCard card1; 

이것은 C에서 Most Vexing Parse로 알려져 ++ :

당신이해야 할 객체를 선언합니다.
오늘 나는이 두 번째 대답을하고 있습니다. 그것을 분석하는 Vexing 보인다! 이 제로 인수와 반환 형식의 플레잉 카드 및 서명 card1와 함수 프로토 타입으로 처리 될 수

+0

하하, 감사합니다. – Holly

1
PlayingCard card1(); 

이 모호성을 만듭니다. 카드 1 뒤에()을 제거하고 확인하십시오.