2013-05-02 3 views
1

Я пытаюсь создать программу, которая будет иметь класс для игровой карты. Однако я столкнулся с ошибкой «неинициализированной локальной переменной». Я не могу для жизни понять, почему, поскольку я думал, что конструкция по умолчанию инициализирует переменные для меня. Я поставил свой код ниже, чтобы описать мою проблему.C++ Playing Card Class

#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 не является хорошим pratice, так как не ясно, хотите больше ли вы использовать атрибут класса suit или локальную переменную suit. Вы должны либо изменить свое имя, либо указать, когда вы используете атрибут класса с this->suit (первый вариант лучше).

+1

Также я бы назвал это плохой практикой, чтобы назвать как локальную переменную, так и переменную класса в одной функции «костюм». Делает это чертовски много запутанным ... – 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; Или вы можете переименовать переменную локального костюма.