Я хочу создать вектор для хранения классов - PullRequest
1 голос
/ 09 декабря 2010

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

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

#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);
} 

Ответы [ 2 ]

7 голосов
/ 09 декабря 2010

Мне кажется, что вы расширяете границы того, что должен делать 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 голос
/ 09 декабря 2010

Здесь есть два простых варианта. Ближе к тому, что вы написали, используйте объявление 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.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...