关于我在结构体中写了这样的语句然后报错的分享

博客探讨了C++中结构体初始化的问题,指出在类体外初始化含有构造函数的复杂对象如`vector`会引发错误。文章通过示例代码展示了如何正确初始化`int`和`vector`类型的成员,并得出结论:在类体外,复杂对象不能用构造函数初始化,而简单类型如`int`可以。最后,作者提出并验证了自己的猜想,总结了C++中关于对象初始化的规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个平静的下午因为这个代码变得不平静

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一样的错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值