使用运算符<<使用QStringList指针

时间:2013-10-04 10:18:31

标签: c++ qt qstring qtcore qlist

我如何更改此代码?

QString s="123";
QStringList *myList=new QStringList;

myList<<s;

错误:

  

与'operator&lt;&lt;'不匹配(操作数类型是'QStringList *'和   '的QString')

*myList<<s;

也不起作用:myList在此之后为空。

3 个答案:

答案 0 :(得分:6)

使用QStringList的指针几乎没有意义,因为这是一个隐式共享类,因为写时复制。您可以在下面找到更多详细信息:

http://qt-project.org/doc/qt-5.1/qtcore/implicit-sharing.html

这意味着,我会将您的代码重构为:

QString s="123";
QStringList myList;

myList << s;

请注意,您似乎写了myList,而myLis也有错字。这至少是一个会导致编译错误的语法错误。如果您对此有支持,也可以使用C ++ 11语法:

QString s="123";
QStringList myList({s});

当你将有更多的元素插入而没有连续的追加线时,这将会派上用场。

但是,如果由于某种原因你仍然对此感兴趣,你应该考虑这个:

myList->append(s);

或者作为最后的手段,即使你没有做过任何其他错误,你的生产线也应该有效。这应该是整个代码,看看你是否做过任何其他错误:

的main.cpp

#include <QStringList>
#include <QDebug>

int main()
{
    QString s="123";
    QStringList *myList = new QStringList;
    *myList<<s;
    qDebug() << *myList;
    return 0;
}

建筑物(类似的东西)

g++ -Wall -fPIC -I/usr/include/qt -I/usr/include/qt/QtCore -lQt5Core main.cpp && ./a.out

输出

("123")

答案 1 :(得分:1)

<<是一个重载过多的运算符。我想你应该试试

(*myList)<<s;

编辑我刚刚测试过,*myList << s;似乎有用...... 也许你还有其他一些问题......

答案 2 :(得分:0)

如果您使用指向QStringList的指针,则必须在使用后手动删除它,因为此类不是QOBJECT且不使用Qt垃圾收集器系统。