标识符':非聚合不能用初始化列表初始化
聚合标识符被错误地初始化。
聚合被定义为:
数组
没有的类,结构和联合:
构造函数
私人或受保护的会员
基类
虚拟功能
另外,Visual C ++不允许包含构造函数的集合中的数据类型。
以下表示当对一个类型尝试集合初始化时C2552可能触发的原因:
该类型具有一个或多个用户定义的构造函数。
该类型有一个或多个非静态私有数据成员。
该类型具有一个或多个虚拟功能。
该类型有一个基类。
该类型是一个ref类或CLR接口。
该类型具有非固定维数组(零数组),其元素具有析构函数。
以下示例生成C2552:
// C2552.cpp // compile with: /clr #include <string> using namespace std; struct Pair_Incorrect { private: string m_name; double m_val; }; struct Pair_Correct1 { public: Pair_Correct1(string name, double val) : m_name(name), m_val(val) {} private: string m_name; double m_val; }; struct Pair_Correct2 { public: string m_name; double m_val; }; int main() { // To fix, add a constructor to this class and use it for // initializing the data members, see Pair_Correct1 (below) // or // Do not have any private or protected non-static data members, // see Pair_Correct2 (below). Pair_Correct2 is not recommended in // case your object model requires some non-static data members to // be private or protected string name("John"); Pair_Incorrect pair1 = { name, 0.0 }; // C2552 // initialize a CLR immutable value type that has a constructor System::DateTime dt = {2001, 4, 12, 22, 16, 49, 844}; // C2552 Pair_Correct1 pair2( name, 0.0 ); Pair_Correct1 pair3 = Pair_Correct1( name, 0.0 ); Pair_Correct2 pair4 = { name, 0.0 }; System::DateTime dt2(2001, 4, 12, 22, 16, 49, 844); }