【问题标题】:(C++ QT) QList only allows appending constant class objects?(C++ QT) QList 只允许附加常量类对象?
【发布时间】:2010-01-07 22:32:51
【问题描述】:

我对 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&) [with T = MyInt*]'

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

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    所以你创建了一个列表:

    QList&lt;MyInt*&gt; myintarray;

    然后你稍后尝试追加

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

    问题是 new const MyInt 正在创建一个 const MyInt *,您不能将它分配给 MyInt *,因为它失去了 const 性。

    你要么需要改变你的 QList 来保存 const MyInts 像这样:

    QList&lt;const MyInt*&gt; myintarray;

    或者您不需要通过将追加更改为来创建 const MyInt *:

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

    您将选择的方法将取决于您希望如何使用 QList。如果您不想更改 MyInt 中的数据,则只需要 const MyInt *

    【讨论】:

      【解决方案2】:

      你需要使用:

         QList<const MyInt*> myintarray;
      

      【讨论】:

      • 要说你不想保存 const 指针,因为你会泄漏(由于 delete 无法处理它们)。但我查了一下,令我惊讶的是,你确实可以删除一个 const 指针。不知道我是否喜欢它,但是……我猜每天都会学到一些新东西!
      • 好的,如果我这样做了,那么那个对象会是可变的吗?我想遍历该列表并编辑一些值,但这不可能,因为这将丢弃“const”限定符。有什么建议吗?
      【解决方案3】:

      编译器会告诉您现在需要做的一切 - 您正在尝试将 const T* 存储为 T* 并且不允许从 const T*T* 的隐式转换。
      append()ing 时省略const

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2012-11-27
          • 1970-01-01
          • 1970-01-01
          • 2014-10-05
          • 2018-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-12
          相关资源
          最近更新 更多