C++ 对结构数据类型c+使用push#u-back时接收错误+;

C++ 对结构数据类型c+使用push#u-back时接收错误+;,c++,c++11,C++,C++11,我有下面的代码,我正在生成一副牌。 首先,我使用函数convertintosuit确定套装,然后进入下一个循环填充卡片组。但我一直得到以下错误: 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/inclu

我有下面的代码,我正在生成一副牌。 首先,我使用函数convertintosuit确定套装,然后进入下一个循环填充卡片组。但我一直得到以下错误:

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});
Running/home/ubuntu/workspace/A5/Assignment5/main.cpp
make:进入目录“/home/ubuntu/workspace/A5/Assignment5”
编译main.o
g++-Wall-g-O3-std=c++11-I/usr/include-c-o main.o main.cpp
main.cpp:在函数“int main()”中:
main.cpp:39:33:错误:调用“std::vector::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; 
}
<代码> //包含部分从C++标准库中添加额外的定义。 #包括//用于cin、cout等。 #包含//用于文本格式(setprecision、setw等) #包括//用于数学函数(sin、cos、pow等) #包括 #包括 #包括 #包括“convertIntToSuit.h” #包括“printCard.h” //#包括“shuffleDeck.h” 使用名称空间std; 结构卡{ 线装; 整数秩; }; int main(){ 向量甲板;
对于(int j=0;j每次迭代都这样做:-

Card c1;
c1.suit=s;
c1.rank=i
deck.push_back(c1);   

您正在做的是:-

deck.push_back({s,i});   

string
将排在
int
之前,因为您的
struct声明

push_back
函数无法理解您要向其发送的内容。将
Card
的两个属性括在花括号中是不够的。您必须在发送i之前构造
Card
结构t向后推。

这里有两个选项:

  • 或者显式构造卡片对象:
    deck.push_back(卡片{s,i});

  • 在vector中构造card对象。这可以消除不必要的对象副本,尽管在这种情况下好处可以忽略不计。但为此,您需要定义一个包含两个参数的显式c'tor。 c++11不允许仅使用参数隐式构造对象。 一旦你有了c'tor-你就可以使用成员函数了,这个函数可以做你想做的事情:它把参数带到构造函数中,并用这些参数在适当的位置构造对象。在你的例子中:

     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);
     }
    
    结构卡{ 线装; 整数秩; 卡片(strings=string(),intr=0):套装(std::move(s)),等级(r){ };
    对于(int i=1;括号内初始化列表中的第一个值是整数,第二个值是字符串。现在继续盯着你的
    卡片
    类,直到你看到你自己的bug。谢谢,我以为我已经切换了它们,但我想
    卡片组之间没有任何区别。向后推({s,i});
    卡片组。向后推(卡片{s,i});