2010-12-08 4 views
0

J'ai remarqué que je peux placer une classe à l'intérieur d'un vecteur; voici mon programme, où je reçois l'erreur suivante:Placer un objet de classe dans un vecteur?

/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 

La question est à l'intérieur de la fonction `blankcard(), où je suis en train de créer une nouvelle instance de la classe, et le mettre dans le vecteur.

Quelqu'un peut-il s'il vous plaît lire le code dites-moi mon problème et donnez-moi un bon exemple dans la façon de faire cela? Je vous remercie.

#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

Vous pouvez toujours copier les erreurs à partir d'une invite de commande. Si c'est Windows, faites un clic droit, sélectionnez «marquer», sélectionnez le bloc, appuyez sur Entrée et collez-le ici. – birryree

+0

@birryree merci !!! – TimothyTech

Répondre

7

Vous déclarez l'organe statique Cards dans la définition de la classe, mais vous ne définissez pas partout. Ajouter une définition après la définition de classe:

vector<Card> Card::Cards; 
+0

Ce qu'il a dit. Voir aussi http://www.parashift.com/c++-faq/ctors.html#faq-10.12 – aschepler

2

Vous devrez instancier le vecteur quelque part car c'est un fichier statique. Fondamentalement, vous voulez quelque chose comme:

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

quelque part dans votre code.

1

Votre vecteur de cartes est défini comme statique. Cela signifie qu'il s'agit effectivement d'une variable globale que vous devez définir. Cela peut être fait en mettant ce qui suit après la définition de la classe de Card:

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

Vous devez déclarer réellement votre vecteur.

Questions connexes