我在尝试将多个值push_back向量时出错。我做错了什么?

I'm getting an error trying to push_back multiple values to a vector. What am I doing wrong?

本文关键字:出错 向量 什么 错了 back push      更新时间:2023-10-16

我正在尝试将多个项目push_back到一个向量中。但它不让我,它给了我一个错误。

我在网上查了一下,看到人们像我一样使用了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>>

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

首先,在card类中,您定义了两种enum class类型,但没有指定cardrankTypesuitType组成。我建议添加字段:

rankType rank;
suitType suit;

到你的card班。

然后,第二个问题在于您尝试仅通过指定rankTypesuitTypepush_backcard。您要么首先需要构造一个card,然后将其push_backvector中,要么使用emplace_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});

但是你需要一个构造函数来初始化suitrank,就像这样:

card(suitType suit, rankType rank) : suit(suit), rank(rank) { }

有了这个构造函数,最好在这里实际使用emplace_back

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

它在vector内构造一个card,而不是创建一个临时的,然后将其复制到所述vector(由于这里的右值引用而移动,这是一个简单的复制(。

您有几个问题:

  • 一次只能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}}
{
}