2010-12-09 12 views
1

Ich bin sehr verwirrt darüber, einen Vektor zu halten, um Klassen zu halten. wenn ich eine Reihe von Daten in einem einzelnen Vektor halten wollte, wie im folgenden Beispiel. dann haben die Daten in einer Klassenmemberfunktion geschrieben und können von anderen Funktionen aufgerufen und verwendet werden.Ich möchte einen Vector erstellen, um Klassen zu halten

Wo bleibe ich die Vektor-Deklaration? bitte helfen!

#include <vector> 

class Card 
{ 
    public: 
    int suit; 
    int rank; 
    Card::Card(int suit, int rank); 
    Function(); 
}; 

vector<Card> cards; 

int main() 
{ 
} 
Card::Function() 
{ 
    for loop... 
    Card cardz(i, i); 
    cards.push_back(cardz); 
} 
+0

Es gibt viele Beispiele herum, z.B. http://www.yolinux.com/TUTORIALS/LinuxTutorialC++STL.html –

+0

@Nikolai N Fetisov im mit Visio Express C++, und ich möchte nicht mit Linux, vor allem, da ich bereits verwirrt, danke obwohl! – TimothyTech

+1

Programmierung ist eigentlich unendlich einfacher und weniger kompliziert in Linux – Falmarri

Antwort

7

Es scheint mir, dass Sie Strecken die Grenzen dessen, was ein Card Objekt tun soll. Darf ich folgendes Layout vorschlagen? Zuerst definiert eine einzelne Karte.

class Card { 
    public: 
    Card(int s, int r) 
    : suit(s), rank(r) { 
     // Initialize anything else here 
    } 

    private: 
    int suit, rank; 
}; 

Als nächstes definieren Sie ein Objekt, das eine vector der Karten hält und manipuliert sie. Nennen wir es Deck

class Deck { 
    public: 
    Deck(); 

    private: 
    vector <Card> cards; 
}; 

nun in Ihrer Deck Klasse, können Sie die Sammlung von Karten initialisieren, wie Sie sehen, passen.

Deck::Deck() { 
    for (int suit = 0; suit < 4; suit++) { 
    for (int rank = 0; rank < 13; rank++) { 
     cards.push_back(Card(suit, rank)); 
    } 
    } 
} 
+0

ausgezeichnet, danke. genau das was ich gesucht habe – TimothyTech

1

Hier gibt es zwei einfache Optionen. Näher an, was Sie geschrieben haben, verwenden Sie eine extern Deklaration in der Header-Datei:

// something.h 
extern vector<Card> cards; 

// something.cpp 
vector<Card> cards; 

Oder wenn es sinnvoll, für diesen Vektor zu „gehören“ class Card macht (aber es gibt nach wie vor nur eine von ihnen), können Sie machen ein es static Mitglied:

// Card.h 
class Card { 
    // ... 
    static void init_cards(); 
    static vector<Card> cards; 
}; 

// Card.cpp 
vector<Card> Card::cards; 

Das static Mitglied kann public oder private wie jedes andere Mitglied sein. Wenn es public ist, muss jeder Code, der nicht in einer Card Methode ist, die cards verwendet, es Card::cards nennen müssen.

So oder so, müssen Sie herausfinden, wie es mit dem Inhalt initialisieren Sie wollen ....

+0

Man muss wissen, was der Vektor mit den darin enthaltenen Elementen tun könnte - besonders beim Kopieren. –

Verwandte Themen