c++ - 帮助在 int main() 中显示 vector

标签 c++ class program-entry-point

我编写的程序创建了一副可以洗牌的纸牌,玩家可以拿四张牌并将它们放入相应的列中。

我可以通过这样做来显示一张卡片:

int main()
{
    Card card;
    cout << card << endl;
}

问题是,我想显示我的玩家类,它由卡片 vector 组成,应该显示四张卡片并将它们放入四个单独的列中。但是使用这个:

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

抱歉这个业余问题,我知道这很简单,在此先感谢。

最佳答案

cout << player;

这行不通,因为你没有重载 operator<<对于类型 Player .请首先执行此操作:

ostream & operator<<(ostream &out, const Player & player)
{
    //your implementation
}

如果它需要访问私有(private)成员,则将其设为friendPlayer .


我刚刚注意到你的类(class) Player有一个函数叫做 print ,也许您想从 operator<<() 调用它.如果您调用它,那么我建议您使用以下函数签名:

   void print(ostream &out) const 
   {
        //use `out`, instead of `cout` now!
   }

然后从 operator<< 调用它,如:

ostream & operator<<(ostream &out, const Player & player)
{
    player.print(out);
    return out; 
}

此实现的优点是您可以输出到控制台以及文件

关于c++ - 帮助在 int main() 中显示 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4945681/

相关文章:

c++ - 无法接收 HTTP 响应正文 C++

c++ - 调试时 VC++ 2015 IDE 中的错误?

java - java的设置方法不起作用

javascript getElementsByClassName 值错误

reactjs - react 主入口点

c++ - 将命令行参数分配给函数

c++ - 使用 Winbase.h 的编译错误

java - 我对 Java 的类和类型的理解正确吗?

java - 使用 Maven 从已部署的 Artifact 运行主类

java - 为什么 applet 不需要 main()?