C++ gcc not clang错误:无法从'&书信电报;括号内的初始值设定项列表>';至';标准::向量<&燃气轮机;

C++ gcc not clang错误:无法从'&书信电报;括号内的初始值设定项列表>';至';标准::向量<&燃气轮机;,c++,gcc,C++,Gcc,以下代码仅对gcc产生错误: could not convert '{{"John", 32}, {"Theo", 23}, {"Aun", 43}, {"Vivien", 67}}' from '<brace-enclosed initializer list>' to 'std::vector<Person>' {"

以下代码仅对gcc产生错误:

could not convert '{{"John", 32}, {"Theo", 23}, {"Aun", 43}, {"Vivien", 67}}' from '<brace-enclosed initializer list>' to 'std::vector<Person>'
                                 {"Vivien", 67}};
无法将“{“John”,32},{“Theo”,23},{“Aun”,43},{“Vivien”,67}”从“”转换为“std::vector”
{“Vivien”,67};
#包括
结构人{

//const char*name;//这可能是由于文字字符串是
const char*
char[]
,因此如果没有隐式构造函数,可能不知道正确的聚合初始值设定项,如果您想用GCC快速编译此字符串,请执行以下操作之一:

std::vector<Person> parr1 = {
    Person {"John", 32},
    Person {"Theo", 23},
    Person {"Aun", 43},
    Person {"Vivien", 67}
};
std::vector parr1={
人{“约翰”,32},
人{“Theo”,23},
人{“Aun”,43},
人{“Vivien”,67}
};
第一个答案使用显式聚合初始化来确保类型在编译时已知。另一个选项是:

struct Person{
    const char* name;
    int age;
};

int main(){
    std::vector<Person> parr1 = {
        { "John", 32 },
        { "Theo", 23 },
        { "Aun", 43 },
        { "Vivien", 6 }
    };
    return 0;
}
struct-Person{
常量字符*名称;
智力年龄;
};
int main(){
标准::向量parr1={
{“约翰”,32},
{“Theo”,23},
{“Aun”,43},
{“Vivien”,6}
};
返回0;
}

这只是确保聚合初始化不需要进行类型转换。

值得一提的是,您的代码是使用g++主干编译的(而不是刚刚发布的10.3.0)。
struct Person{
    const char* name;
    int age;
};

int main(){
    std::vector<Person> parr1 = {
        { "John", 32 },
        { "Theo", 23 },
        { "Aun", 43 },
        { "Vivien", 6 }
    };
    return 0;
}