2011-12-06 42 views
17

Tôi đang gặp nhiều lỗi trong dự án cuối cùng của mình (một trò chơi xì phé và xì phé màu đen). Tôi đang sử dụng một vector để thực hiện "bàn tay" trong lớp blackJack, và tôi đang sử dụng một kiểu dữ liệu có cấu trúc được khai báo trong một lớp khác, được thừa hưởng công khai. Lỗi tôi đang lo lắng về là trình biên dịch tôi đang sử dụng nói với tôi rằng tôi không tuyên bố một loại trong vector.Lỗi: vector không đặt tên là loại

Blackjack tập tin tiêu đề:

#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 

tập tin tiêu đề thẻ (đây là lớp jack màu đen được thừa hưởng từ):

#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 

Trả lời

15

sử dụng:

std::vector <Acard> playerHand; 

ở khắp mọi nơi đủ điều kiện nó bằng cách std::

hoặc làm:

using std::vector; 

trong tệp cpp của bạn.

Bạn phải làm điều này vì vector được xác định trong không gian tên std và bạn không yêu cầu chương trình của bạn tìm thấy nó trong không gian tên std, bạn cần phải nói điều đó.

47

Bạn quên thêm std:: tiền tố không gian tên vào vector tên lớp.

9

Bạn cần phải hoặc đủ điều kiện vector với namespace của nó (đó là std), hoặc nhập không gian tên ở phía trên cùng của tập tin CPP của bạn:

using namespace std; 
+8

Không sai. Nhưng xin đừng làm điều này. –

+1

U có thể thực hiện điều này nhưng chỉ trong các tệp nguồn. Không có trong tiêu đề bởi vì sau đó U sẽ là một điều rất xấu (tôi có nghĩa là một số spaghetti). – Hauleth

+0

@LokiAstari tại sao không làm điều này? Không phải cái này 'sử dụng không gian tên' là gì? hoặc là vấn đề với lũ lụt không gian tên của bạn với tất cả mọi thứ từ std? (Tôi không tranh luận, tôi đang học C++) –

8

Ngoài ra bạn có thể thêm #include<vector> trong tiêu đề. Khi hai giải pháp trên không hoạt động.

+1

Đối với một số lý do vector chỉ hoạt động khi được đưa vào tệp tiêu đề của tôi. Nếu tôi đặt nó trong tập tin nguồn của tôi nó không hoạt động và nó là người duy nhất hoạt động theo cách này. Tại sao? – JoeManiaci

Các vấn đề liên quan