大佬教程收集整理的这篇文章主要介绍了gcc 上的错误不是 clang:无法从“<brace-enclosed initializer list>”转换为“std::vector<>,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码仅在使用 gcc 时会产生错误:
Could not convert '{{"John",32},{"Theo",23},{"Aun",43},{"VivIEn",67}}' from '<brace-enclosed initializer List>' to 'std::vector<Person>'
{"VivIEn",67}};
#include <vector>
struct Person{
//const char* name; // <-- Compiles in both gcc and clang
char name[32]; // <-- Error in gcc only
int age;
};
int main(){
std::vector<Person> parr1 = {{"John",67}};
return 0;
}
(https://godbolt.org/z/1qEaaqcaC)
这是什么原因? 有没有办法让char数组版本用gcc编译?
我正在使用 gcc 8.3 和最新的 clang 进行测试。
这可能是由于文字字符串是 const char*
到 char[]
,因此没有隐式构造函数,可能不知道正确的聚合初始值设定项,如果您想快速编译它GCC,请执行以下任一操作:
std::vector<Person> parr1 = {
Person {"John",32},Person {"Theo",23},Person {"Aun",43},Person {"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;
}
这只是确保聚合初始化不需要类型转换。
以上是大佬教程为你收集整理的gcc 上的错误不是 clang:无法从“<brace-enclosed initializer list>”转换为“std::vector<>全部内容,希望文章能够帮你解决gcc 上的错误不是 clang:无法从“<brace-enclosed initializer list>”转换为“std::vector<>所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。