一个平静的下午因为这个代码变得不平静
struct node {
int a;
vector<int> b(10, 0);
}e[100];
乍一看感觉没什么毛病,编译之后????
不让在结构体内初始化?于是我就改成了这一份代码
struct node {
int a = 2;
vector<int> b;
}e[100];
是不是心里已经开始觉得这个也会报错?可是结果是这样的
。。。。我人麻了,但是我心里还有一种想法,于是我就试了一下下面的代码
太对了太对了,于是我有个大胆的猜测,那就是:在main函数外,有构造函数的对象不可以使用构造函数进行初始化,带着这样的猜测,在网上搜报错信息,得到了专业的解答
在c++的类体中,方法以外的区域不允许有初始化,简单类型是可以的(例如int等简单类型变量,以及静态成员变量),但是有构造函数的复杂对象就不可以了(例如vector)
总结:int虽然是简单数据类型,可以用‘=’进行初始化,但是int也是一个类,也是有构造函数,所以上边的int a(2); 调用了int的构造函数,才会报出和vector一样的错。