错误 C2552:'pairs':无法使用初始值设定项列表初始化非聚合
error C2552: 'pairs' : non-aggregates cannot be initialized with initializer list
如何解决这个问题才能编译?
#include <utility>
int main() {
const std::pair<const char*, const char*> pairs[] = { {"String A", "String 1"},
{"String B", "String 2"}
};
}
给出此编译器错误:
1>main.cpp(256): error C2552: 'pairs' : non-aggregates cannot be initialized with initializer list
1> 'std::pair<_Ty1,_Ty2>' : Types with user defined constructors are not aggregate
1> with
1> [
1> _Ty1=const char *,
1> _Ty2=const char *
1> ]
1>main.cpp(257): error C2552: 'pairs' : non-aggregates cannot be initialized with initializer list
1> 'std::pair<_Ty1,_Ty2>' : Types with user defined constructors are not aggregate
1> with
1> [
1> _Ty1=const char *,
1> _Ty2=const char *
1> ]
您正在做的是 C++11 中引入的统一初始化。VS2012中的C++11兼容性充其量是最小的,并且在许多方面完全缺失。
您根本无法使用该版本的Visual Studio时使用类似的语法。相反,您必须使用例如 std::make_pair
:
const std::pair<const char*, const char*> pairs[] = {
std::make_pair("String A", "String 1"),
std::make_pair("String B", "String 2")
};
在 Ubuntu g++ 4.9.2 上,它工作正常。不确定Visual Studio 2012。但第一个变体是你需要使用构造函数,第二个变体是在VS2013(括号初始化)中添加的。
相关文章:
- 复制列表初始化的隐式转换的等级是多少
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- C++11 中的混合列表初始化
- 我可以列表初始化 std::vector 并完美转发元素吗?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- C++20 从括号中的值列表初始化聚合,不支持内部数组
- 如何在向量列表初始化时避免对象复制以及如何延长临时的生存期
- 默认参数和空列表初始化
- 如何在列表初始化中放置额外的语句?
- C++列表初始化允许多个用户定义的转换
- 列表初始化是否将原子初始化为零
- 使用可变模板列表初始化数组,并放置new
- 使用整数初始化列表初始化长双精度的向量
- 直接列表初始化的自动规则
- 使用初始化列表初始化unique_ptr的容器,继续
- 如何修复"非聚合无法使用初始值设定项列表初始化" <map>
- 直接列表初始化和复制列表初始化之间的差异
- 为什么我可以在不使用赋值运算符的情况下使用列表初始化普通数组
- C++ - 使用类中的初始值设定项列表初始化动态集