1

我正在尝试创建一个具有扑克牌类的程序,但是我遇到了“未初始化的局部变量 'suit' used”错误。我一生都无法弄清楚为什么,因为我认为默认构造会为我初始化变量。我把我的代码放在下面来描述我的问题。

#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
4

2 回答 2

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

你忘了告诉它是来自 的成员Card。它应该是:

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

此外 - 感谢 Anton - 命名局部变量suit并不是一个好习惯,因为现在还不清楚您是要使用类属性suit还是局部变量suit。您应该更改其名称或指定何时使用类属性this->suit(第一个选项更好)。

于 2013-05-02T08:20:44.607 回答
0

您需要指定 getSuit 是 Card 类的一部分

char Card::getSuit()

还 :

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

你正在分配西装。尝试使用char suit = this.suit;或者您可以重命名本地西装变量。

于 2013-05-02T08:30:24.553 回答