error C2864:只有静态常量整型数据成员才可以在类中初始化

时间:2022-09-09 15:11:23

用visual Studio 2010不支持非静态常量整型数据成员在类内初始化,报错 error C2864:只有静态常量整型数据成员才可以在类中初始化

error C2864:只有静态常量整型数据成员才可以在类中初始化


原因:

    VS2010支持C++11之前的标准(C++98/C++03),只有静态常量整型数据成员才可以在类中初始化。类定义只是一个框架,不是实例,不会分配存储空间,不会给它的成员变量赋值。只有类被实例化时,即创建对象,才会分配内存,才会给其成员变量赋值。静态常量整型数据成员是一个特例。


解决:

    1.可以通过构造函数实现类内非静态常量整型数据成员的初始化。

    2.C++11(VS2013版本及以后支持C++11)新标准规定,可以为数据成员提供一个类内初始值,创建对象时,类内初始值将用于初始化数据成员。没有初始值的成员将被默认初始化。

visual Studio 2015编译如下:

error C2864:只有静态常量整型数据成员才可以在类中初始化

1)bookNo将被默认初始化为空字符串

2)units_sold与revenue将初始化为0,初始形式只有三种有效:

unsigned units_sold = 0;
unsigned units_sold = {0};
unsigned units_sold {0};

   此外,普通初始化还有第四种形式:
unsigned units_sold (0);  此圆括号形式对普通初始化有效,不可用于类内初始化

注:可用class替换struct实现类定义