常成员函数里没改变成员变量,怎么会报错?????

weixin_38050323 2019-09-19 01:47:13
//////////头文件#ifndef HEADER1_H_#define HEADER1_H_class Head1:public QHeaderView{    Q_OBJECT.....    QStringList strList;    void paintSection(QPainter*painter,const QRect&rect,int logicalIndex)const;    ......};#endif /*HEADER1_H_*///源文件void Head1::paintSection(QPainter*painter,const QRect&rect,int logicalIndex)const{  ....     QString str;  str=strList.takeAt(logicalIndex*3+0);  ......}编译此文件时会报错,提示如下信息passing `const QStringList' as `this' argument of `T QList<T>::takeAt(int) [with T = QString]' discards qualifiers    请问是什么原因常成员函数调用成员变量,没有改变strList啊,怎么会报错???
...全文
26 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38067871 2019-09-19
  • 打赏
  • 举报
回复
楼主,能说一下怎么改的吗?
weixin_38088241 2019-09-19
  • 打赏
  • 举报
回复
改成str=strList.at() 就行因为strList为成员变量,在常成员函数里不能调用成员变量的成员函数
weixin_38058748 2019-09-19
  • 打赏
  • 举报
回复
takeAt会修改strList, 你看看takeAt的文档就明白了
weixin_38063619 2019-09-19
  • 打赏
  • 举报
回复
str=strList.takeAt(logicalIndex*3+0);改成str=strList.at(logicalIndex*3+0) 或者 str=strList[logicalIndex*3+0];或者str=const_cast<QStringList*>(&strList).takeAt(logicalIndex*3+0);
weixin_38065708 2019-09-19
  • 打赏
  • 举报
回复
C++ 里头说了。 常量函数只能调用常量成员函数。
weixin_38067167 2019-09-19
  • 打赏
  • 举报
回复
感谢各位,问题已解决

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧