• 4072阅读
  • 6回复

常成员函数里没改变成员变量,怎么会报错????? [复制链接]

上一主题 下一主题
离线hawkyz0919
 
只看楼主 倒序阅读 楼主  发表于: 2009-06-01
//////////头文件

#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啊,怎么会报错???
离线shiroki

只看该作者 1楼 发表于: 2009-06-01
takeAt会修改strList, 你看看takeAt的文档就明白了
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线foxyz

只看该作者 2楼 发表于: 2009-06-01
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);
离线gvim
只看该作者 3楼 发表于: 2009-06-02
C++ 里头说了。 常量函数只能调用常量成员函数。
Qt,Qt! 分享Cute之Qt体验
欢迎访问 http://www.cuteqt.com
欢迎订阅 http://www.cuteqt.com/?feed=rss2

离线hawkyz0919
只看该作者 4楼 发表于: 2009-06-02
感谢各位,问题已解决
离线wuleeemail

只看该作者 5楼 发表于: 2009-06-02
楼主,能说一下怎么改的吗?
离线hawkyz0919
只看该作者 6楼 发表于: 2009-06-04
改成str=strList.at() 就行
因为strList为成员变量,在常成员函数里不能调用成员变量的成员函数
快速回复
限100 字节
 
上一个 下一个