(C ++ QT)QList只允许附加常量类对象?

时间:2010-01-07 22:32:52

标签: c++ qt

我对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的参数1   QList :: append(const T&amp;)[与T =   敏*]“

如果有人能够指出我做错了什么,那就太棒了。

4 个答案:

答案 0 :(得分:7)

所以你创建了一个列表:

QList<MyInt*> myintarray;

然后你试着追加

myintarray.append(new const MyInt(1,"intvar1",&parent));

问题是新的const MyInt正在创建一个const MyInt *,你无法将其分配给MyInt *,因为它会丢失常量。

您需要更改QList以保持const MyInts,如下所示:

QList<const MyInt*> myintarray;

或者您不需要通过将附加更改为:

来创建const MyInt *
myintarray.append(new MyInt(1,"intvar1",&parent));

您将选择的方法取决于您想要如何使用QList。如果您不想更改MyInt中的数据

,则只需要const MyInt *

答案 1 :(得分:3)

您需要使用:

   QList<const MyInt*> myintarray;

答案 2 :(得分:0)

编译器现在告诉您所需要的一切 - 您尝试将const T*存储为T*,而const T*T*的隐式转换不是允许。
const时,请忽略append()

答案 3 :(得分:0)

我会说你应该将常规的MyInt *传递给QList :: append。 “const T&amp;”指的是指针类型 - QList承诺不会重新分配你提供的指针。