2010-12-08 9 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

コマンドプロンプトからもエ​​ラーをコピーできます。ウィンドウの場合は、右クリックして 'マーク'を選択し、ブロックを選択して、Enterキーを押して、ここに貼り付けます。 – birryree

+0

@birryreeありがとう! – TimothyTech

答えて

7

あなたは、クラス定義内で静的メンバCardsを宣言しているが、あなたはどこにでもそれを定義されていません。クラス定義の後に定義を追加します。

vector<Card> Card::Cards; 
+0

彼が言ったこと。 http://www.parashift.com/c++-faq/ctors.html#faq-10.12も参照してください。 – aschepler

2

静的なので、どこかにベクトルをインスタンス化する必要があります。基本的には、次のようなものが必要です:

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

あなたのコードのどこかにあります。

1

あなたのカードのベクトルは静的と定義されています。つまり、事実上、それを定義する必要があるグローバル変数です。これはCardのクラス定義の後に以下のものを置くことによって行うことができます。

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

あなたが実際にあなたのベクトルを宣言する必要があります。

関連する問題