首页 > 解决方案 > 在 C++ 中输出枚举类类型的向量元素

问题描述

我已经创建了用于 C++ 扑克游戏的纸牌和套牌类,但是,我正在尝试检查我的矢量元素分配是否正确并且在控制台上显示它们时遇到问题。我有一个用于西装的枚举类和一个用于等级的整数值。我看到我的卡片组向量正在生成 52 张卡片,但我不确定如何使用display()每个向量元素的卡片类函数正确地将其显示在屏幕上。任何帮助,将不胜感激。

注意:我还猜测另一种方法是重载输出流运算符以显示向量元素,该元素是具有枚举类参数的对象,但也不确定该语法会是什么样子。

int main(){ Deck deck();}

卡片.h

#pragma once
#include <stdlib.h>
#include <iostream>
using namespace std;

enum class Suit { Hearts, Diamonds, Spades, Clubs };

class Card
{
private:
    Suit m_suit;
    int m_rank;
public:
    Card();
    Card(int r, Suit s);
    void display();

    int getRank();
    void setRank(int);

    Suit getSuit();
    void setSuit(Suit);

};

卡片.cpp

#include "Card.h"
#include <iostream>
#include <string>


Card::Card(): m_rank(0), m_suit(Suit::Hearts)
{
    
}


Card::Card(int r, Suit s)
{
    m_rank = r;
    m_suit = s;
}

void Card::display()
{
    if (m_rank == 1)    // for number cards, show value
    {
        std::cout << "Ace";
    }
    else if ((2 <= m_rank) && (m_rank <= 10))
    {
        std::cout << m_rank;
    }
    else
    {
        switch (m_rank)
        {
        case 11:
            std::cout << "Jack";
            break;
        case 12:
            std::cout << "Queen";
            break;
        case 13:
            std::cout << "King";
            break;
        default:
            std::cout << "INVALID RANK";

        }
    }

    switch (m_suit)         // display suit
    {
    case Suit::Hearts:
        std::cout << " of Hearts";
        break;
    case Suit::Diamonds:
        std::cout << " of Diamonds";
        break;
    case Suit::Spades:
        std::cout << " of Spades";
        break;
    case Suit::Clubs:
        std::cout << " of Clubs";
        break;

    };
}

int Card::getRank()
// return the numeric value of a card
{
    return (m_rank);
}

甲板.h

#pragma once
#include <vector>
#include "Card.h"
class Deck
{
private:
    Card card;
    std::vector<Card> m_deck;
public:
    Deck();
    void shuffle();
    void grabCard();
};

甲板.cpp

#include "Deck.h"
#include "Card.h"
#include <vector>

Deck::Deck()
{
    
    for (int i = 1; i < 14; i++)
    {
        for (int j = int(Suit::Hearts); j <= int(Suit::Clubs); j++)
        {
            m_deck.push_back(Card(int(i), Suit(j))); //passing the card constructor to create a card object, then store it as a vector element
            int counter = 0; // use to print out each element
            std::cout << m_deck[card.display()]; //output each card obect via display method
            std::cout << "\t\n";
            counter++;
        }
    }

}
void Deck::shuffle()
{
    

}
void Deck::grabCard()
{

}

标签: c++oop

解决方案


要显示矢量元素,您应该调用要显示display()的矢量元素。

std::cout << m_deck[card.display()];

应该

m_deck.back().display();

让它显示最后推送的卡片。

也是int main(){ Deck deck();}一个只有函数声明的主函数,Deck::Deck()不会被调用。
要调用构造函数,它应该是int main(){ Deck deck;}.


推荐阅读