我有以下代码,我正在生成一副牌。 首先,我使用函数convertIntToSuit确定套装,然后进入下一个循环以填充卡片组。但我不断收到以下错误:
Running /home/ubuntu/workspace/A5/Assignment5/main.cpp
make: Entering directory `/home/ubuntu/workspace/A5/Assignment5'
Compiling main.o
g++ -Wall -g -O3 -std=c++11 -I/usr/include -c -o main.o main.cpp
main.cpp: In function ‘int main()’:
main.cpp:39:33: error: no matching function for call to ‘std::vector<Card>::push_back(<brace-enclosed initializer list>)’
deck.push_back({i,s});
这是我的代码:
// The include section adds extra definitions from the C++ standard library.
#include <iostream> // For cin, cout, etc.
#include <iomanip> // For text formatting (setprecision, setw, etc.)
#include <cmath> // For math functions (sin, cos, pow, etc.)
#include <cstdlib>
#include <vector>
#include <string>
#include"convertIntToSuit.h"
#include"printCard.h"
//#include"shuffleDeck.h"
using namespace std;
struct Card {
string suit;
int rank;
};
int main() {
vector<Card> deck;
for(int j = 0; j<4; ++j){
string s = convertIntToSuit(j);
for(int i=1; i<=13; ++i){
deck.push_back({i,s});
}
}
return 0;
}
答案 0 :(得分:0)
每次迭代都这样做: -
application_controller.rb
或
你正在做的将是: -Card c1;
c1.suit=s;
c1.rank=i
deck.push_back(c1);
由于deck.push_back({s,i});
, string
将在int
之前出现。
答案 1 :(得分:0)
push_back
功能无法理解您发送给它的内容。将Card
的两个属性括在花括号中是不够的。在将它发送到push_back之前,必须构造Card
结构。
答案 2 :(得分:0)
这里有两个选项:
明确构建Card对象:deck.push_back(Card{s,i});
在向量内部构造卡对象。这可以消除不需要的对象副本,但在这种情况下,好处可以忽略不计。但是为此你需要定义一个带有两个参数的显式c。 c ++ 11不允许使用参数隐式构造对象。 一旦你有了c&#39;你可以使用emplace_back成员函数,它完全符合你的要求:它接受构造函数的参数并使用这些参数就地构造对象。在你的情况下:
struct Card {
string suit;
int rank;
Card(string s = string(), int r = 0) : suit(std::move(s)), rank(r) {}
};
for (int i=1; i<=13; ++i){
deck.emplace_back(i,s);
}
请注意,使用emplace_back
时不需要大括号。