ZBLOG

E:\YZYEdu\YZYEdu\SendPaper\viewprogress.cpp:59: error: assignment of read-only location 'banswerData->st_Studbanswer::labels.QList::at(j)' banswerData->labels.at(j) = std::make_shared(); // 鏇挎崲 YourObjectType ...

这个错误信息表明你正在尝试给 QList<QLabel*> 的某个元素赋值,但该位置是只读的。具体来说,使用 at() 方法访问的元素不能直接进行赋值,因为 at() 返回的是对该元素的常量引用。

要解决这个问题,可以使用 QList::replace() 方法或将新对象插入到列表中。这里有两种方法可以实现你的目标:

方法1:使用 replace()

如果你只是想替换特定索引的元素,可以使用 replace() 方法:

banswerData->labels.replace(j, new QLabel());

方法2:使用 insert()

如果你想在列表中添加一个新对象,而不是替换现有对象,你可以用 insert()append()

if (j < banswerData->labels.size()) {
    // 如果 j 在范围内,则替换
    banswerData->labels[j] = new QLabel();  // 注意这里仍然是裸指针
} else {
    // 否则,添加新的 QLabel 到末尾
    banswerData->labels.append(new QLabel()); // 同样是裸指针
}

注意事项: 如果可能的话,建议使用智能指针(如 std::shared_ptr)来管理资源,以避免内存泄漏。这样做时,请确保将列表类型更改为相应的智能指针类型,例如:

QList<std::shared_ptr<QLabel>> labels;

然后就可以安全地这样做:

if (j < banswerData->labels.size()) {
    banswerData->labels[j] = std::make_shared<QLabel>();
} else {
    banswerData->labels.append(std::make_shared<QLabel>());
}

这样不仅能处理智能指针,而且代码也更加安全和清晰。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21448

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?