2017-09-27 77 views
0

我目前正在爲一個類的卡程序和我遇到了一個問題,其中編譯器告訴我,事情沒有被聲明在它們的範圍和有些事情根本沒有被宣佈。下面是代碼:另一個'在這個範圍內沒有聲明'的問題,當它被宣佈爲

Card.h:

#ifndef _CARD_H 
#define _CARD_H 

#include <iostream> 
#include <string> 

using namespace std; 

enum RANK{Joker, Ace = 1, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King} 
enum SUIT{Clubs, Diamonds, Hearts, Spades} 

class Card 
{ 
private: 
    //Rank and Suit variables for all cards 
    int rank; 
    int suit; 

public: 
    //Constructors 
    Card(); 
    Card(int r, int s); 

    //Getters 
    int getRank(); 
    int getSuit(); 

    //Setters 
    void setRank(int r); 
    void setSuit(int s); 

    //toString 
    string toString(); 
}; 

#endif 

Card.cpp:

#ifndef _CARD_H 
#define _CARD_H 
#include "Card.h" 
#include <iostream> 
#include <string> 

using namespace std; 

//Default constructor 
Card::Card() 
{ 
    rank=Joker; 
    suit=Clubs; 
} 

//Constructor 
Card::Card(int r, int s) 
{ 
    rank = r; 
    suit = s; 
} 

//Getters for rank and suit 
int Card::getRank() 
{ 
    return rank; 
} 
int Card::getSuit() 
{ 
    return suit; 
} 

//Setters for rank and suit 
void Card::setRank(int r) 
{ 
    rank = r; 
} 
void Card::setSuit(int s) 
{ 
    suit = s; 
} 

//toString function for output 
string Card::toString() 
{ 
    string tempstring = ""; //list of if-else statements for what to add to the string that gets printed 
    if (rank == 0) 
    { 
     tempstring += "Joker"; 
     goto stringEnd; //sends the process to the end of the list if rank is Joker so it doesn't attempt to add a suit to the card toString 
    } 
    else if (rank == 1) 
     tempstring += "Ace of "; 
    else if (rank == 2) 
     tempstring += "Two of "; 
    else if (rank == 3) 
     tempstring += "Three of "; 
    else if (rank == 4) 
     tempstring += "Four of "; 
    else if (rank == 5) 
     tempstring += "Five of "; 
    else if (rank == 6) 
     tempstring += "Six of "; 
    else if (rank == 7) 
     tempstring += "Seven of "; 
    else if (rank == 8) 
     tempstring += "Eight of "; 
    else if (rank == 9) 
     tempstring += "Nine of "; 
    else if (rank == 10) 
     tempstring += "Ten of "; 
    else if (rank == 11) 
     tempstring += "Jack of "; 
    else if (rank == 12) 
     tempstring += "Queen of "; 
    else if (rank == 13) 
     tempstring += "King of "; 
    if (suit == 0) 
     tempstring += "Clubs"; 
    else if (suit == 1) 
     tempstring += "Diamonds"; 
    else if (suit == 2) 
     tempstring += "Hearts"; 
    else if (suit == 3) 
     tempstring += "Spades"; 
    stringEnd: 
    return tempstring; 
} 

#endif 

我不知道爲什麼它不編譯正確。一切似乎都對我好。

+0

這不是問題,但是以下劃線開頭的名稱後跟一個大寫字母('_CARD_H')和​​包含兩個連續下劃線的名稱將被保留供實施使用。不要在你的代碼中使用它們。 –

回答

5

您不應該在.cpp文件中使用#include警衛。你的.h文件基本上沒有被解析,因爲_CARD_H已經定義。

0
  1. 在枚舉聲明結尾缺少分號。
  2. 包括不需要在Card.cpp除的#include 「Card.h」

所以,Card.h會像

#ifndef _CARD_H 
#define _CARD_H 

#include <iostream> 
#include <string> 

using namespace std; 

enum RANK{Joker, Ace = 1, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King}; 
enum SUIT{Clubs, Diamonds, Hearts, Spades}; 

class Card{ 
private: 
    //Rank and Suit variables for all cards 
    int rank; 
    int suit; 
public: 
    //Constructors 
    Card(); 
    Card(int r, int s); 

    //Getters 
    int getRank(); 
    int getSuit(); 

    //Setters 
    void setRank(int r); 
    void setSuit(int s); 

    //toString 
    string toString(); 
}; 

#endif 

而且Card.cpp會像

#include "Card.h" 
//Default constructor 
Card::Card() 
{ 
    rank=Joker; 
    suit=Clubs; 
} 

//Constructor 
Card::Card(int r, int s) 
{ 
    rank = r; 
    suit = s; 
} 

//Getters for rank and suit 
int Card::getRank() 
{ 
    return rank; 
} 
int Card::getSuit() 
{ 
    return suit; 
} 

//Setters for rank and suit 
void Card::setRank(int r) 
{ 
    rank = r; 
} 
void Card::setSuit(int s) 
{ 
    suit = s; 
} 

//toString function for output 
string Card::toString() 
{ 
    string tempstring = ""; //list of if-else statements for what to add to the string that gets printed 
    if (rank == 0) 
    { 
     tempstring += "Joker"; 
     goto stringEnd; //sends the process to the end of the list if rank is Joker so it doesn't attempt to add a suit to the card toString 
    } 
    else if (rank == 1) 
     tempstring += "Ace of "; 
    else if (rank == 2) 
     tempstring += "Two of "; 
    else if (rank == 3) 
     tempstring += "Three of "; 
    else if (rank == 4) 
     tempstring += "Four of "; 
    else if (rank == 5) 
     tempstring += "Five of "; 
    else if (rank == 6) 
     tempstring += "Six of "; 
    else if (rank == 7) 
     tempstring += "Seven of "; 
    else if (rank == 8) 
     tempstring += "Eight of "; 
    else if (rank == 9) 
     tempstring += "Nine of "; 
    else if (rank == 10) 
     tempstring += "Ten of "; 
    else if (rank == 11) 
     tempstring += "Jack of "; 
    else if (rank == 12) 
     tempstring += "Queen of "; 
    else if (rank == 13) 
     tempstring += "King of "; 
    if (suit == 0) 
     tempstring += "Clubs"; 
    else if (suit == 1) 
     tempstring += "Diamonds"; 
    else if (suit == 2) 
     tempstring += "Hearts"; 
    else if (suit == 3) 
     tempstring += "Spades"; 
    stringEnd: 
    return tempstring; 
} 

它應該編譯得很好。

相關問題