2013-05-02 5 views
1

나는 게임 카드를위한 클래스를 가진 프로그램을 만들려고 노력하고 있습니다. 그러나 "초기화되지 않은 로컬 변수 '슈트'사용됨 '오류가 발생합니다. 나는 왜 나를 생각할 수 없는지, 기본 구조가 나를 위해 변수를 초기화 할 것이라고 생각했다. 내 문제를 설명하기 위해 아래 코드를 써 놓았습니다.C++ Playing Card 클래스

#include "Card.h" 
#include <iostream> 
using namespace std; 

int main() { 
Card Hand('D','H'); 

Hand.getSuit(); 

return 0; 
} 

이것은 클래스를 실행해야하는 내 드라이버입니다. 여기

#include "Card.h" 
#include <iostream>  
#include <cstdlib>  
#include <string> 
using namespace std; 

Card::Card() 
{ 
suit = 'H'; 
rank = '1'; 
worth = 1; 
} 

Card::Card(char b , char h) 
{ 
suit = 'H'; 
rank = 'H'; 
worth = 1; 
} 

char getSuit(){ 
char suit = suit; 
cout << suit; 
return suit; 
} 

그리고 내 헤더 파일 :

#ifndef CARD_H 
#define CARD_H 

class Card 
{ 
private: 
    char suit; 
    char rank; 
    int worth; 

public: 
    Card::Card(); 
    Card::Card(char, char); 

    char getSuit(); 
    char getRank(); 
    int getWorth(); 

}; 
#endif 

답변

1
char getSuit(){ 
    char suit = suit; 
    cout << suit; 
    return suit; 
} 

당신은 그것을 Card에서 일원 이야기하는 것을 잊었다는 여기 내 프로그램 파일입니다. 그것은해야한다 :

char Card::getSuit(){ 
    char suit = suit; 
    cout << suit; 
    return suit; 
} 

는 또한 - 감사 안톤 -, 지역 변수 suit의 이름을 지정하는 것은 좋은의 연습하지 않습니다 당신이 클래스의 속성 suit 또는 로컬 변수 suit를 사용하려면 더 이상 여부를 명확하지 때문이다. 이름을 변경하거나 this->suit과 함께 class 속성을 사용할 때 지정해야합니다 (첫 번째 옵션이 더 좋습니다).

+1

또한 로컬 변수와 클래스 변수를 하나의 함수 'suit'로 명명하는 것은 좋지 않습니다. 혼란 스러울 정도로 지옥을 만듭니다 ... – SinisterMJ

+0

예, '이'또는 다른 이름이 필요합니다. 나는 끝낼 것이다. – Morwenn

+1

'char suit = suit;'를 제거하면 괜찮습니다. –

0

당신은 getSuit이

char Card::getSuit() 

또한 카드 클래스의 일부임을 지정해야합니다 : 당신은에 맞게 옷을 할당하는

char getSuit(){ 
    char suit = suit; 
    cout << suit; 
    return suit; 
} 

. 시도하십시오 char suit = this.suit; 또는 로컬 수트 변수의 이름을 바꿀 수 있습니다.