我在尝试将多个值推入向量时遇到错误。我究竟做错了什么?

时间:2019-09-03 00:17:36

标签: c++ class vector enums

我正在尝试将多个项目推回向量。但这不是让我,而是给我一个错误。

我已经在线检查了一下,发现人们像我一样使用了push_back函数并使其起作用。我以为这是我不能多次推送_push_back的事实,所以我删除了多余的传递值,但仍然遇到相同的错误。

出现错误的函数(红线在push_back函数之前的点下):

originalCardDeck.push_back(card::suitType::CLUBS, card::rankType::TWO);

包含向量的类。

class deck
{
public:
    deck()
    {
        originalCardDeck.push_back(card::suitType::CLUBS, card::rankType::TWO);
    }

    ~deck();

    void printDeck(int deck[]);

private:

    vector<card>originalCardDeck;
    vector<card>shuffledCardDeck;
};

包含枚举类型的卡类。

class card
{
public:

    card();

    ~card();

    enum class rankType
    {
        TWO = 2,
        THREE,
        FOUR,
        FIVE,
        SIX,
        SEVEN,
        EIGHT,
        NINE,
        TEN,
        JACK,
        QUEEN,
        KING,
        ACE
    };

    enum class suitType
    {
        CLUBS,
        DIAMONDS,
        HEARTS,
        SPADES

private:
        rankType rank;
        suitType suit;
    };

我收到一条错误消息:

C++ no instance of overloaded function matches the argument list
argument types are: (card::suitType, card::rankType)            
object type is: std::vector<card, std::allocator<card>>

我对这一行的意图是能够将包含多种数据类型的元素推回向量中,因此以后可以引用它。如果没有错误消息,我会把它放在for循环中。

2 个答案:

答案 0 :(得分:0)

您有几个问题:

  • 您一次只能push_back一项。

  • 卡没有带有2个参数的构造函数:

您可以这样做:

card(suitType, rankType) {/*..*/}

deck()
{
    originalCardDeck.push_back({card::suitType::CLUBS, card::rankType::TWO})
}

对于deck,您可以不使用push_back来直接初始化矢量:

deck() : originalCardDeck{{card::suitType::CLUBS, card::rankType::TWO}}
{
}

答案 1 :(得分:0)

首先,在您的card类中,您定义了两种enum class类型,但未指定cardrankType和{{1 }}。我建议添加字段:

suitType

进入您的rankType rank; suitType suit; 班。

然后,第二个问题在于您试图仅指定cardpush_backcardrankType。您要么先构造一个suitType,然后cardpush_back,要么使用vectoremplace_back内创建一个card使用用于构造vector的参数。要使用card方法,您可以替换:

push_back

具有:

originalCardDeck.push_back(card::suitType::CLUBS, card::rankType::TWO);

但是您将需要一个初始化originalCardDeck.push_back(card{card::suitType::CLUBS, card::rankType::TWO}); suit的构造函数,如下所示:

rank

有了该构造函数,最好在此处实际使用card(suitType suit, rankType rank) : suit(suit), rank(rank) { }

emplace_back

originalCardDeck.emplace_back(card::suitType::CLUBS, card::rankType::TWO); 内构造一个card而不是创建一个临时文件,然后将其复制(由于此处右值引用而进行了简单的复制)到所说的vector