• 5109阅读
  • 2回复

QList [复制链接]

上一主题 下一主题
离线小林由
 
只看楼主 倒序阅读 楼主  发表于: 2012-06-16
关键词: 求助

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTextStream co(stdout, QIODevice::WriteOnly);


    QList<QString> list;


    list <<"aa" <<"BB" <<"cc";
    co <<list.size()<<endl;
    co <<list.takeAt(0)<<endl;
    co <<list.takeAt(1)<<endl;
    co <<list.takeAt(2)<<endl;


    return a.exec();
}


程序蹦掉了输出:
ASSERT failure in QList<T>::take: "index out of range", file ..\..\..\QT\4.8.2\include/QtCore/../../src/corelib/tools/qlist.h, line 485
3
aa
cc
1.那个·"BB"呢,为什么没了。
2.list.size()明显是3个,为什么··take(2)这里会崩掉

离线ppdayz

只看该作者 1楼 发表于: 2012-06-16
回 楼主(小林由) 的帖子
T QList::takeAt ( int i )
Removes the item at index position i and returns it. i must be a valid index position in the list (i.e., 0 <= i < size()).

If you don't use the return value, removeAt() is more efficient.

list <<"aa" <<"BB" <<"cc";
co <<list.takeAt(0)<<endl;
之后。。list变成  "BB"  "cc"

co <<list.takeAt(1)<<endl
list 变成 "BB"

然后下面的就出错了
你把list打印出来看就知道了
离线jdwx

只看该作者 2楼 发表于: 2012-06-16
回 楼主(小林由) 的帖子
co <<list.size()<<endl;    3个
co <<list.takeAt(0)<<endl;   剩2个
co <<list.takeAt(1)<<endl;   剩1个
co <<list.takeAt(2)<<endl;  总共还有一个,你非要删除第三个,崩溃。


发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
快速回复
限100 字节
 
上一个 下一个