我非常困惑于制作一个矢量来保持类。 如果我想在单个向量中保存一堆数据,如下例所示。然后将数据写入类成员函数中,并且能够被其他函数调用并使用。
我在哪里坚持矢量声明? 请帮忙!
#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 :(得分: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 :(得分: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
的{{1}}方法中的任何代码都必须将其称为cards
。
无论哪种方式,你必须弄清楚如何用你想要的内容初始化它....