2010-12-08 2 views
0

Я заметил, что могу разместить класс внутри вектора; вот моя программа, где я получаю следующее сообщение об ошибке:Размещение объекта класса внутри вектора?

/out:blackjack.exe 
blackjack.obj 
blackjack.obj : error LNK2019: unresolved external symbol "private: static class 
std::vector<class Card,class std::allocator<class Card> > Card::Cards" ([email protected] 
[email protected]@[email protected]@@[email protected]@@@[email protected]@@[email protected]@A) referenced in functio 
n "public: static void __cdecl Card::blankCard(void)" ([email protected]@@SAXXZ) 
blackjack.exe : fatal error LNK1120: 1 unresolved externals 

Вопрос находится внутри функции `blankcard(), где я пытаюсь создать новый экземпляр класса, и поместить его в вектор.

Может кто-нибудь, пожалуйста, прочитайте код, скажите мне мою проблему и дайте мне хороший пример того, как это сделать? Спасибо.

#include <iostream> 
#include <vector> 
#include <string> 
using namespace std; 

class Card 
{ 
    private: 
    string suit; 
    int number; 
    static vector<Card> Cards; 

    public: 
    Card::Card(); 
    Card::Card(string cardS, int cardV); 
    static void createCards(); 
    static void blankCard();  
}; 


int main() 
{ 
    Card::blankCard(); 
    return 0; 
} 

Card::Card(){}; 
Card::Card(string cardS, int cardV){}; 

void Card::blankCard() 
{ 
    int temp = 1; 
    int cardValue; 
    string suit; 
    int suitCount = 1; 

    for(int i = 1; i < 52; i++) 
    { 
    if(temp == 1 || temp > 13) 
    { 
     temp = 1; 
     cardValue = temp; 
     temp ++; 
    } 
    else if(temp > 1) 
    { 
     cardValue = temp; 
     temp ++; 
    } 

    if(suitCount <= 13) 
    { 
     suit = "spade"; 
     suitCount++; 
    } 
    else if(suitCount >= 14 && suitCount <= 26) 
    { 
     suit = "club"; 
     suitCount++; 
    } 
    else if(suitCount >= 27 && suitCount <= 39) 
    { 
     suit = "heart"; 
     suitCount++; 
    } 
    else if(suitCount >= 40 && suitCount <= 52) 
    { 
     suit = "diamonds"; 
     suitCount++; 
    }  

    Card a = Card(suit, cardValue); 
    Cards.push_back(a); 
    } 
} 
+0

Вы по-прежнему можете копировать ошибки из командной строки. Если это окна, щелкните правой кнопкой мыши, выберите «отметка», выберите блок, нажмите «Ввод» и вставьте его здесь. – birryree 2010-12-08 18:18:24

+0

@birryree спасибо !!! – TimothyTech 2010-12-08 18:21:32

ответ

7

Вы объявляете статический член Cards внутри определения класса, но не определяя его в любом месте. Добавьте определение после определения класса:

vector<Card> Card::Cards; 
2

Вам понадобится создать экземпляр вектора где-нибудь, так как он статичен. В принципе, вы хотите что-то вроде:

std::vector<Card> Card::Cards; 

где-то в вашем коде.

1

Ваш карточный вектор определяется как статический. Это означает, что это эффективная глобальная переменная, которую вы должны определить. Это можно сделать, поставив следующие после определения класса из Card:

std::vector<Card> Card::Cards(); 
1

Вы должны фактически объявить вектор.

Смежные вопросы