【发布时间】:2019-09-03 00:17:36
【问题描述】:
我正在尝试将多个项目 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 循环中。
【问题讨论】:
-
如果你真的“在网上查过”,你能引用一些声称
push_back()接受两个或更多参数的引用,这就是你在做什么?或许您可以在in a good C++ book 中找到一些更高质量的信息以及更多信息和有用的 C++ 学习资料,而不是在线查看? -
@SamVarshavchik stackoverflow.com/questions/18104928/… stackoverflow.com/questions/45080937/…。这可能看起来无关紧要,但它看起来就像我正在尝试做的事情。
-
顺便说一句,
card::suitType::CLUBS或card::rankType::TWO都不是卡片。 -
引用的问题没有将两个值传递给
push_back()。您是否碰巧注意到其中的{和}符号。在 C++ 中,这类事情真的很有意义。它们不仅仅是编译器忽略的某种装饰。这是使用现代 C++ 的统一初始化语法将 single 对象传递给push_back()的示例,该对象是通过将x和y传递给对象的 构造函数 i>,与push_back()本身无关。 -
@SamVarshavchik 这很有意义。这与 Fareeish 的建议非常相似。我将查看他的答案并尝试将其与我的答案进行比较。