2

我如何更改此代码?

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

myList<<s;

错误:

'operator<<' 不匹配(操作数类型为 'QStringList*' 和 'QString')

*myList<<s;

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

4

3 回答 3

7

将指针用于 a 几乎没有意义,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);

或者作为最后的手段,如果你没有犯任何其他错误,你的生产线也应该可以工作。这应该是整个代码,看看你是否犯了任何其他错误:

主文件

#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")
于 2013-10-04T10:24:42.010 回答
1

<<是一个重载的运算符。我觉得你应该试试

(*myList)<<s;

编辑我刚刚测试过,*myList << s;似乎可以工作......也许你还有其他问题......

于 2013-10-04T10:21:44.157 回答
0

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

于 2014-08-16T19:41:04.000 回答