前两天在用CLion写一段C++代码时编译报错,报错的位置很奇怪,是在STL list
中的一个赋值语句处报错:
查看报错信息,发现原因不在于STL list
,而在于一个自定义的类PointPos
:
object of type 'PointPos' cannot be assigned because its copy operator is implicitly deleted
PointPos类的对象不能被赋值,因为拷贝操作符被隐式地删除了
因为我的代码里面使用了列表容器来放这个类的对象,类似list<PointPos>
的用法,因此在列表的底层操作中可能会对该类的对象拷贝赋值,又不知道为什么操作符被删除了,所以赋值失败报错。
那么为什么赋值操作符(就是“=”)被隐式删除了呢?再仔细看下面的注释,发现了原因:
原来是PointPos
类的一个成员变量被定义成了const常量:
const int lineIndex;
因此编译器认为需要禁止使用拷贝赋值操作符,自动把它给删除了。
简单地把成员变量前的const关键字去掉,则编译不会再报错了,问题顺利解决。