我正在尝试将多个项目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
类型,但没有指定card
由rankType
和suitType
组成。我建议添加字段:
rankType rank;
suitType suit;
到你的card
班。
然后,第二个问题在于您尝试仅通过指定rankType
和suitType
来push_back
card
。您要么首先需要构造一个card
,然后将其push_back
到vector
中,要么使用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});
但是你需要一个构造函数来初始化suit
和rank
,就像这样:
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}}
{
}