2011-12-06 55 views
17

我在我的最終項目(一個撲克和黑色傑克模擬器)中有很多錯誤。我正在使用一個向量來實現blackJack類中的「手」,並且我正在使用在另一個類中聲明的結構化數據類型,該類是公開繼承的。我擔心的錯誤是我使用的編譯器告訴我,我沒有在向量中聲明類型。錯誤:向量沒有命名類型

酒杯頭文件:

#ifndef BLACKJACK_H 
#define BLACKJACK_H 
#include <vector> 
#include "card.h" 

class blackJack: public cards 
{ 
private: 
    vector <Acard> playerHand; 
    vector <Acard> dealerHand; 

public: 
    blackJack(); 
    void dealHands(); 
    void hitOrStay(); 
    void dealerHit(); 
    int handleReward(int); 
    void printHands(); 
}; 
#endif 

卡頭文件(這是類黑傑克繼承):

#ifndef CARD_H 
#define CARD_H 

const char club[] = "\xe2\x99\xa3"; 
const char heart[] = "\xe2\x99\xa5"; 
const char spade[] = "\xe2\x99\xa0"; 
const char diamond[] = "\xe2\x99\xa6"; 
//structured data to hold card information 
//including: 
// a number, representing Ace-King (aces low) 
//a character, representing the card's suit 
struct Acard 
{ 
    int number; 
    char pic[4]; 
}; 



// a class to hold information regarding a deck of cards 
//including: 
//An array of 52 Acard datatypes, representing our Deck 
//an index to the next card in the array 
//a constructor initializing the array indices to Ace-king in each suit 
//a function using random numbers to shuffle our deck of cards 
//13 void functions to print each card 
class cards 
{ 
    private: 
    Acard Deck[52]; 
    int NextCard; 
    public: 
    cards(); 
    Acard getCard(); 
    void shuffleDeck(); 
    void cardAce(char[]); 
    void cardTwo(char[]); 
    void cardThree(char[]); 
    void cardFour(char[]); 
    void cardFive(char[]); 
    void cardSix(char[]); 
    void cardSeven(char[]); 
    void cardEight(char[]); 
    void cardNine(char[]); 
    void cardTen(char[]); 
    void cardJack(char[]); 
    void cardQueen(char[]); 
    void cardKing(char[]); 

}; 

#endif 

回答

15

使用:

std::vector <Acard> playerHand; 

處處std::限定它

或做:

using std::vector; 

在您的cpp文件中。

你必須這樣做,因爲vectorstd命名空間中定義,你不知道你的程序中找到它std命名空間中,你需要告訴。

47

您忘記了將std::名稱空間前綴添加到vector類名。

9

你需要在你的CPP文件的頂部要麼出線vector其命名空間(這是std),或導入命名空間:

using namespace std; 
+8

沒有錯。但請不要這樣做。 –

+1

U可以做到這一點,但只能在源文件中。不是在標題,因爲那麼你會很糟糕的東西(我的意思是一些意大利麪條)。 – Hauleth

+0

@LokiAstari爲什麼不做這個?這不是'使用命名空間'的目的嗎?或者是用std的所有內容氾濫你的命名空間的問題? (我不爭論,我正在學習C++) –

8

您也可以在頭部添加#include<vector>。當上述兩個解決方案不起作用時。

+1

由於某些原因,只有在我的頭文件中包含向量時才能使用向量。如果我把它放在我的源文件中,它不起作用,而且它是唯一以這種方式工作的。爲什麼? – JoeManiaci