[英](C++ QT) QList only allows appending constant class objects?
我对QT很陌生。 我已经把它弄乱了一个星期。 尝试将自定义数据类型添加到Qlist时遇到错误
QObject parent;
QList<MyInt*> myintarray;
myintarray.append(new const MyInt(1,"intvar1",&parent));
myintarray.append(new const MyInt(2,"intvar2",&parent));
myintarray.append(new const MyInt(3,"intvar3",&parent));
我的MyInt类是int的简单包装,看起来像这样
#ifndef MYINT_H
#define MYINT_H
#include <QString>
#include <QObject>
class MyInt : public QObject
{
Q_OBJECT
public:
MyInt(const QString name=0, QObject *parent = 0);
MyInt(const int &value,const QString name=0, QObject *parent = 0);
MyInt(const MyInt &value,const QString name=0,QObject *parent = 0);
int getInt() const;
public slots:
void setInt(const int &value);
void setInt(const MyInt &value);
signals:
void valueChanged(const int newValue);
private:
int intStore;
};
#endif
我在Qlist追加期间遇到的错误
错误:从'const MyInt *'到'MyInt *'的无效转换错误:
初始化“ void QList :: append(const T&)[with T = MyInt *]”的参数1
如果有人能指出我在做什么错,那将是很棒的。
因此,您创建了以下列表:
QList<MyInt*> myintarray;
然后您稍后尝试附加
myintarray.append(new const MyInt(1,"intvar1",&parent));
问题是新的const MyInt正在创建const MyInt *,您不能将其分配给MyInt *,因为它会失去constness。
您要么需要更改QList来保存const MyInts,如下所示:
QList<const MyInt*> myintarray;
或者您不需要通过将追加更改为以下内容来创建const MyInt *:
myintarray.append(new MyInt(1,"intvar1",&parent));
您将选择的方法将完全取决于您要如何使用QList。 如果您不想更改MyInt中的数据,则只需要const MyInt *
您将需要使用:
QList<const MyInt*> myintarray;
编译器告诉您现在需要做的所有事情-您试图将const T*
存储为T*
并且不允许从const T*
到T*
隐式转换。
只需在append()
时省略const
。
我会说您应该将常规MyInt *传递到QList :: append中。 “ const T&”表示指针类型-QList承诺不会重新分配您提供的指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.