2010-12-09 2 views
1

Im очень смущенно о создании вектора для хранения классов. , если я хотел бы держать кучу данных в одном векторе, как в примере ниже. затем данные записываются в функцию члена класса и могут быть вызваны и использованы другими функциями.Я хочу создать вектор для хранения классов

где я прикрепляю объявление к вектору? , пожалуйста, помогите!

#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

Существует множество примеров, например, http://www.yolinux.com/TUTORIALS/LinuxTutorialC++STL.html – 2010-12-09 00:06:43

+0

@Nikolai N Fetissov im использует Visio express C++, и я не хочу возиться с linux, тем более, что я уже смущен, спасибо, хотя! – TimothyTech 2010-12-09 00:09:01

+1

Программирование на самом деле бесконечно проще и менее сложно в Linux – Falmarri 2010-12-09 00:10:39

ответ

7

Мне кажется, что вы растягивая границы какой Card объект должен делать. Могу ли я предложить следующий макет? Сначала определяется карта .

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

    private: 
    int suit, rank; 
}; 

Далее определяют объект, который держит vector карт и манипулирует ими. Давайте назовем это Deck

class Deck { 
    public: 
    Deck(); 

    private: 
    vector <Card> cards; 
}; 

Теперь в вашем Deck классе, вы можете инициализировать коллекцию карт, как вы считаете нужным.

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

Здесь есть два простых варианта. Ближе к тому, что вы написали, используйте extern декларацию в заголовочном файле:

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

// something.cpp 
vector<Card> cards; 

Или, если это имеет смысл для этого вектора «принадлежат» к class Card (но есть еще только один из них), вы можете сделать это static член:

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

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

static элемент может быть public или private, как и любой другой член. Если это public, любой код, который не находится в методе Card, который использует cards, должен будет называть его Card::cards.

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

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