Программа, которую я написал, создает колоду карты, которую можно перетасовать, и игрок, который берет четыре карты и помещает их в соответствующие столбцы.Справка Отображение вектора В int main()
Я могу показать одну карту, делая это:
int main()
{
Card card;
cout << card << endl;
}
Проблема заключается в том, я хочу показать свой класс игрока, который состоит из вектора карт и должны отображать четыре карты и поместить их в четыре отдельные столбцы. Но используя это:
int main()
{
Deck deck;
deck.shuffle();
Player player;
cout << player;
}
ничего не отображает, на самом деле это дает мне ошибку.
Как правильно отображать четыре карты в их четырех столбцах?
Кроме того, здесь весь код, который я до сих пор, в случае, если вы хотите, чтобы пройти через это сами:
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
enum suits
{
diamond, club, heart, spade
};
class Card
{
private:
int rank;
suits suit;
public:
Card();
Card(suits, int);
int getRank() { return rank; }
suits getSuit() { return suit; }
void setRank(int rankvalue) { rank = rankvalue; }
void setSuit(suits suitvalue) { suit = suitvalue; }
};
ostream & operator<<(ostream &, Card);
Card::Card()
{
rank = 1;
suit = spade;
}
Card::Card(suits suitvalue, int rankvalue)
{
rank = rankvalue;
suit = suitvalue;
}
ostream & operator<<(ostream & out, Card aCard)
{
switch (int rank = aCard.getRank())
{
case 1: out << "Ace"; break;
case 11: out << "Jack"; break;
case 12: out << "Queen"; break;
case 13: out << "King"; break;
default: out << rank;
}
switch (suits suit = aCard.getSuit())
{
case diamond: out << " of Diamonds"; break;
case spade: out << " of Spades"; break;
case heart: out << " of Hearts"; break;
case club: out << " of Clubs"; break;
}
return out;
}
class RandomInteger
{
public:
RandomInteger();
unsigned int operator() (unsigned int max);
};
RandomInteger::RandomInteger()
{
srand(time(0));
}
unsigned int RandomInteger::operator()(unsigned int max)
{
unsigned int rval = rand();
return rval % max;
}
RandomInteger randomizer;
class Deck
{
Card cards[52];
int topCard;
public:
Deck();
void shuffle();
bool isEmpty() { return topCard <= 0; }
Card draw();
};
extern RandomInteger randomizer;
Deck::Deck()
{
topCard = 0;
for (int i = 1; i <= 13; i++)
{
Card c1(diamond, i), c2(spade, i), c3(heart, i), c4(club, i);
cards[topCard++] = c1;
cards[topCard++] = c2;
cards[topCard++] = c3;
cards[topCard++] = c4;
}
}
Card Deck::draw()
{
if (!isEmpty())
return cards[--topCard];
else
{
Card spadeAce(spade, 1);
return spadeAce;
}
}
void Deck::shuffle()
{
random_shuffle(cards, cards+52, randomizer);
}
class Player
{
public:
Player();
void print();
Card draw(Deck &);
typedef vector<Card> cards;
vector<cards> column;
};
Player::Player()
{
column.push_back(vector<Card>());
column.push_back(vector<Card>());
column.push_back(vector<Card>());
column.push_back(vector<Card>());
}
Card Player::draw(Deck & aDeck)
{
for (int i = 0; i < 4; i++)
column[i].push_back(aDeck.draw());
}
void Player::print()
{
cout << "Col 1 \t Col 2 \t Col 3 \t Col 4 \n";
bool more = true;
for (int j = 0; more; j++)
{
more = false;
for (int i = 0; i < 4; i++)
if (j < column[i].size())
{
cout << column[i][j] << "\t";
more = true;
}
else
cout << "\t\t";
cout << endl;
}
}
int main()
{
Deck deck;
deck.shuffle();
Player player;
while (!deck.isEmpty());
cout << player;
}
Извините за любительскую вопрос, я знаю, что это что-то просто, и заранее спасибо.
Где перегруженное OStream Определения для игрока? –
Я не вижу, чтобы оператор << определялся для игрока. Это должно привести к ошибке компиляции. Можете ли вы добавить свою реализацию оператора << для игрока? – Patrick
Вы определили 'operator << (std :: ostream &, Card)', поэтому вы четко знаете ho, чтобы сделать это, но вы, похоже, даже не пытались определить выход 'operator << (ostream &, const Player &), ; ' –