문제

다만 시작한 배우는 코드에서는 학교입니다.우리의 임무에 필요 우리를 만드는 카드 게임과 함께 카드에,갑판 및 손 클래스입니다.나는 데 문제로 지금도 예외:std::bad_alloc 에는 메모리 위치에 있습니다.여기에는 나의 코드는 지금

CardType h:

#ifndef cardType_h
#define cardType_h
#include <string>

using namespace std;

class cardType{
public:
  void print();
  int getValue() const;
  string getSymbol() const;
  string getSpecial() const;
  string getSuit() const;
  int checkSpecial(int gscore) const;

  cardType();
  cardType(string suit,int value);

private:
  int value;
  string special;
  string symbol;
  string suit;
};

#endif

CardType cpp:

#include "cardType.h"
#include <iostream>
#include <string>

using namespace std;

void cardType::print()
{
  cout <<  getSymbol() << " of " << getSuit() << ", having the value of " <<           getValue() << "."<< endl  <<"This card's special is " << getSpecial() << endl;
}


int  cardType::getValue() const
{
  return value;
}

string cardType::getSymbol() const
{
  return symbol;
}

string cardType::getSpecial() const
{
  return special;
}

string cardType::getSuit() const
{
  return suit;
}

cardType::cardType(){

  value=0;      
  symbol="?";       
  special='?';
  suit='?';
}
cardType::cardType(string s, int v){
  suit = s;
  value = v;
  switch(v){
    case 1:             // Ace cards have a value of 1  and have no special type
    symbol="Ace";   
    special="None";
    break;
    case 2:             // 2 cards have a value of  2 and have no special type
    symbol="2";
    special="None";
    break;
    case 3:
    symbol="3";     // 3 cards have a value of  3 and have no special type
    special="None";
    break;
    case 4:
    symbol="4";     // 4 cards have a value of  0 and have a special type "Reverse" which reverses the flow of the game
    special="Reverse";
    value=0;
    break;
case 5:
    symbol="5";     // 5 cards have a value of 5 and have no special type
    special="None";
    break;
case 6:
    symbol="6";     // 6 cards have a value of  6 and have no special type
    special="None";
    break;
case 7: 
    symbol="7";     // 7 cards have a value of  7 and have no special type
    special="None";
    break;
case 8: 
    symbol="8";     // 8 cards have a value of  8 and have no special type
    special="None";
    break;
case 9: 
    symbol="9";     // 9 cards have a value of  0 and have a special type "Pass" which does not add any value to the game and lets the player skip his turn.
    special="Pass";
    value=0;
    break;
case 10:
    symbol="10";    // 10 cards have a value of  10 and have a special type "subtract" which instead of adding the 10 value to the total game it is subtracted instead.
    special="Subtract";
    value=10;
    break;
case 11:            // Jack cards have a value of 10 and have no special type
    symbol="Jack";
    special="None";
    value=10;
    break;
case 12:            // Queens cards have a value of 10 and have no special type
    symbol="Queen";
    special="None";
    value=10;
    break;
case 13:    
    symbol="King";  // King cards have a value of 0 and have a special type "NinetyNine" which changes the total game score to 99 reguardless what number it was previously
    special="NinetyNine";
    value=0;
    break;
}

}

int cardType::checkSpecial(int gscore) const{
if(special=="Pass"){
    return gscore;
}
if(special=="Reverse"){
    return gscore;
}
if(special=="Subtract"){
    return gscore - value;
}
if(special=="NinetyNine"){
    return 99;
}

else{
    return gscore + value;
}
}

DeckType h:

#ifndef deckType_h
#define deckType_h
#include "cardType.h"
#include <string>

using namespace std;

class deckType
{
public:
void shuffle();
cardType dealCard();
deckType();
private: 
cardType *deck;
int current;
};

#endif

DeckType cpp:

#include <iostream>
#include "deckType.h"


using namespace std;

deckType::deckType()
{   int index = 0;
int current=0;
deck = new cardType[52];

string suit[] = {"Hearts","Diamonds","Clubs","Spades"};
int value[] = {1,2,3,4,5,6,7,8,9,10,11,12,13};

  for ( int i = 0; i <= 3; i++ ) {
     for ( int j = 1; j <= 13; j++ ) {
        deck[index] = cardType(suit[i],value[j]);
        index++;
     }
  }
}

cardType deckType::dealCard()
{
return deck[current];
current++;
}

주요 cpp:

#include "deckType.h"
#include <iostream>

using namespace std;

int main()
{   
deckType gamedeck;
cout << "1" <<endl;
cardType currentCard;
cout << "2" <<endl;
currentCard = gamedeck.dealCard();
cout << "3" <<endl;


return 0;
}

도 bad_alloc 에 currentCard=gamedeck.dealCard();내가 정말 무엇인지 몰라 나는 잘못입니다.

도움이 되었습니까?

해결책

에서 생성자,당신은 문자열을 사용한 strings:

cardType::cardType(){
    value=0;        
    symbol="?";     
    special="?";
    suit="?";
}

current 에서 사용되는 dealCard 지 않을 수도 있습이 초기화되었습니다.

deckType::deckType()
{   int index = 0;
    int current=0;
    deck = new cardType[52];
    ....

여기에서,당신은 지역 변수 초기화 current, 이 숨겨원 current.

@drescherjm 의 주석은 매우 중요하다:

for ( int j = 1; j <= 13; j++ ) { 할 수 없는 일이다.기 c++ 색인 0 에서 시작.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top