我正在尝试将多个项目推回向量。但这不是让我,而是给我一个错误。
我已经在线检查了一下,发现人们像我一样使用了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循环中。
答案 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
类型,但未指定card
由rankType
和{{1 }}。我建议添加字段:
suitType
进入您的rankType rank;
suitType suit;
班。
然后,第二个问题在于您试图仅指定card
和push_back
来card
和rankType
。您要么先构造一个suitType
,然后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);
内构造一个card
而不是创建一个临时文件,然后将其复制(由于此处右值引用而进行了简单的复制)到所说的vector
。