mainmenu.cpp:1519:25: No viable overloaded '=' qlist.h:163:15: candidate function not viable: 'this' argument has type 'const QList<qint32>' (aka 'const QList<int>'), but method is not marked const qlist.h:166:19: candidate function not viable: 'this' argument has type 'const QList<qint32>' (aka 'const QList<int>'), but method is not marked const
时间: 2024-03-04 20:48:48 浏览: 130
这个错误是因为你试图修改一个常量QList的元素,而常量对象的成员是不可被修改的。当你尝试给一个常量QList赋值一个新的QList时,会发生这个错误。
如果你想要清空一个常量QList的元素,可以使用`QList::clear()`函数,示例代码如下:
```cpp
const QList<int> myList = {1, 2, 3};
QList<int> emptyList;
myList = emptyList; // 这样会报错,不能给常量赋值
emptyList = myList; // 这样也会报错,不能修改常量QList的元素
emptyList.clear(); // 这样可以清空常量QList的元素
```
需要注意的是,清空常量QList的元素并不会释放其占用的内存空间,因为常量对象是只读的,所以不能对其进行内存的修改。如果你想要释放常量QList占用的内存空间,需要将其定义为非常量对象,并使用`QList::squeeze()`函数释放内存空间。
相关问题
还是报错 mainmenu.cpp:1519:25: No viable overloaded '=' qlist.h:163:15: candidate function not viable: 'this' argument has type 'const QList<qint32>' (aka 'const QList<int>'), but method is not marked const qlist.h:166:19: candidate function not viable: 'this' argument has type 'const QList<qint32>' (aka 'const QList<int>'), but method is not marked const
非常抱歉,我的回答中还是有误。由于`permission`是一个常量对象,不能直接对其进行赋值操作。如果你想清空`permission`并重新赋值,可以使用如下代码:
```cpp
QList<qint32> emptyList;
permission = QList<qint32>(emptyList.begin(), emptyList.end());
```
这样做的原理是,首先定义一个空的`QList<qint32>`对象`emptyList`,然后使用其迭代器指示的区间构造一个新的`QList<qint32>`对象,并将新的对象赋值给常量对象`permission`。
需要注意的是,由于`permission`是一个常量对象,其元素是不可修改的。因此,如果你想修改`permission`的元素,需要将其定义为非常量对象。在修改完元素后,你可以将其重新定义为常量对象。示例代码如下:
```cpp
// 将permission定义为非常量对象
QList<qint32> permission = {1, 2, 3};
// 修改permission的元素
permission[1] = 4;
// 将permission重新定义为常量对象
const QList<qint32>& constPermission = permission;
```
这样做的原理是,首先将`permission`定义为非常量对象,然后修改其第二个元素的值。最后将`permission`重新定义为常量对象,这样就可以保证它的元素不会再被修改。
报错这个mainmenu.cpp:1519:25: No viable overloaded '=' qlist.h:163:15: candidate function not viable: 'this' argument has type 'const QList<qint32>' (aka 'const QList<int>'), but method is not marked const qlist.h:166:19: candidate function not viable: 'this' argument has type 'const QList<qint32>' (aka 'const QList<int>'), but method is not marked const
这个错误是因为你试图修改一个常量QList的元素,而常量对象的成员是不可被修改的。当你尝试给一个常量QList赋值一个新的QList时,会发生这个错误。
如果你想要清空一个常量QList的元素,可以使用`QList::clear()`函数,示例代码如下:
```cpp
const QList<int> myList = {1, 2, 3};
QList<int> emptyList;
myList = emptyList; // 这样会报错,不能给常量赋值
emptyList = myList; // 这样也会报错,不能修改常量QList的元素
emptyList.clear(); // 这样可以清空常量QList的元素
```
需要注意的是,清空常量QList的元素并不会释放其占用的内存空间,因为常量对象是只读的,所以不能对其进行内存的修改。如果你想要释放常量QList占用的内存空间,需要将其定义为非常量对象,并使用`QList::squeeze()`函数释放内存空间。
阅读全文