正如标题所暗示的那样,我正试图将一个矢量从一个类发送到另一个类..这是一些示例代码......
class Deck
{
public:
//constructor
Deck(){}
~Deck(){} //deconstructor
//global for setting deck size
int SetDeckMultiplier;
//Card SetUp
//access vector
std::vector<int> GetCopyOfVector(){return cards;}
//set deck size based on multiplier
void SetDeckSize();
//shuffle card vector
void shuffle();
//End Card Setup
protected:
private:
std::vector <int> cards;
};
这基本上设置了一个向量,用int填充它,而不是改组整数。
我有第二堂课......
class Dealer: public Deck
{
public:
void Hit();
void GetStoredDeck()
{
std::cout << cards.size() << std::endl;
}
void DealCard();
void DealerScore();
void IniDeal();
void CardPositions();
private:
};
我试图将矢量拉入此类,以便经销商可以使用整数。我可以使向量受保护,但.size()为0.有没有办法在第一个类中填充和洗牌后将它传递给这个类?
编辑:
我没有太多代码中的函数代码。我刚刚完成了骨架设置。
Deck.cpp
void Deck::SetDeckSize()
{
for (int i = 0; i < (52 * SetDeckMultiplier); i++)
{
cards.push_back(i);
}
//set card values
for (int i = 0; i > (52 * SetDeckMultiplier); i++)
{
cards[i] = i;
}
}
void Deck::shuffle()
{
for (int i = 0; i < (52 * SetDeckMultiplier); i++)
{
int r = i + (rand() % ((52 * SetDeckMultiplier) - i)); // Random remaining position.
int temp = cards[i]; cards[i] = cards[r]; cards[r] = temp; //swap cards
while (cards[i] >= 52) cards[i] = cards[i] - 52; //loop to ensure correct number for display
//std::cout << cards[i] << std::endl;//display random cards.. for now
}
}
这是我必须填充向量并对元素进行洗牌的代码。
我想把洗牌后的矢量用在经销商类中。通过这种方式,经销商可以获得向量中的下一个元素并执行需要完成的操作。
我对size()的评价是,如果我使向量保护而不是私有,我可以通过继承使用向量,但它是空向量而不是填充和混乱的向量。
答案 0 :(得分:1)
您需要做的是在Deck构造函数中将create cards 添加到cards
。这只是一个简单的示例,它显示了基类和派生类之间的共享数据:
class Deck
{
public:
Deck() : cards{1,2} {} // C++11 supports initializer list
virtual ~Deck() {} // better declare base destructor as virtual
protected: // derived class can access protected base members
std::vector <int> cards;
};
class Dealer: public Deck
{
public:
Dealer() // Deck default constructor is called
{
}
void GetStoredDeck()
{
std::cout << cards.size() << std::endl;
}
};
int main(int argc, char* argv[])
{
Dealer dealer;
dealer.GetStoredDeck(); // you should see 2 cards now?
return 0;
}
答案 1 :(得分:1)
从您的代码开始(假设您已在cards
中保护Deck
),您可以使用您的经销商类:
Dealer dealer;
dealer.SetDeckSize();
dealer.shuffle();
dealer.GetStoredDeck();
然而,正如@Troy指出的那样,你的班级设计并不好看。
经销商不是套牌,因此Dealer
不应该是Deck
的子类。相反,Dealer
应该包含Deck类的字段,如下所示:
class Dealer
{
public:
void Hit();
void DealCard();
void DealerScore();
void IniDeal();
void CardPositions();
private:
Deck deck;
};
答案 2 :(得分:0)
要在派生类cards
中访问int vector Dealer
,必须声明它protected
...
从你的方法名称来看,我猜Deck::SetDeckSize()
就是把cards
放入其中的人。
所以,我猜你在调用Dealer::GetStoredDeck()
之前没有调用过这个方法。