使用运算符<<与 QStringList 指针

Using the operator<< with a QStringList pointer

本文关键字:lt QStringList 指针 运算符      更新时间:2023-10-16

如何更改此代码?

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

错误:

与"运算符<<"不匹配(操作数类型为"QStringList*"和 "QString"(

*myList<<s;

也不起作用:在此之后,myList 是空的。

指针用于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);

或者作为最后的手段,如果你没有犯任何其他错误,即使你的线路也应该有效。这应该是整个代码,以查看您是否犯了任何其他错误:

主.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")

<<是一个重载运算符。我认为你应该尝试

(*myList)<<s;

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

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