1

トランプのクラスを持つプログラムを作成しようとしていますが、「初期化されていないローカル変数 'スーツ' が使用されています」というエラーが発生します。デフォルトのコンストラクトが変数を初期化すると思っていたので、一生理由を理解できません。問題を説明するために、コードを以下に示します。

#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 に感謝します。 class 属性を使用するかローカル変数suitを使用するかが明確でないため、ローカル変数に名前を付けるのは適切な方法ではありません。その名前を変更するか、class 属性をいつ使用するかを指定する必要があります(最初のオプションの方が適切です)。suitsuitthis->suit

于 2013-05-02T08:20:44.607 に答える