【问题标题】:Qt QList<T> casts and node_copyQt QList<T> 强制转换和 node_copy
【发布时间】:2014-12-01 16:09:07
【问题描述】:

我发现了一个错误,但不知道如何修复它。我正在为可用的 SQLDrivers(提供者)做组合框选择器。

标题

#include "QObject"
#include "QString"
#include "QList"
#include "QPointer"

class TProvider;
typedef const TProvider * const TProviderPointer;

class TProvider
{
    public:
        QString name;
        QString driverName;

        TProvider(QString name, QString driverName);
        static const QList<TProviderPointer> getAvailableProviders();
        static TProviderPointer getProvider(int id);
};

TProviderPointer MySQLProvider = new TProvider("MySQL", "QMYSQL");
TProviderPointer IBProvider = new TProvider("Interbase", "QIBASE");

CPP。在这里,我创建了两个指向 const Providers (TProviderPointer) 的 const 指针(枚举可用的驱动程序)。我有一个方法,它返回 const QList。

#include "tprovider.h"

TProvider::TProvider(QString name, QString driverName):
    name(name), driverName(driverName)
{
}

const QList<TProviderPointer> TProvider::getAvailableProviders()
{
    QList<TProviderPointer> list;
    list.append(MySQLProvider);
    list.append(IBProvider);

    return list;
}

TProviderPointer getProvider(int id)
{
    switch(id){
        case 0:
            return MySQLProvider;
        case 1:
            return IBProvider;
    }
}

当我使用它时

const QList<TProviderPointer> list = TProvider::getAvailableProviders();
foreach (TProviderPointer provider, list) {
    ui->eprovider->addItem(provider->name);
}

我得到错误指向 qlist.h 和线 const QList&lt;TProviderPointer&gt; list = TProvider::getAvailableProviders(); -> C2440 TProviderPointer *void * 线:

Q_INLINE_TEMPLATE void QList<T>::node_copy(Node *from, Node *to, Node *src)

我在使用中是否有任何复制操作?我怎样才能解决这个问题? 谢谢。

【问题讨论】:

    标签: c++ qt pointers qlist


    【解决方案1】:

    我认为问题出在你的 typedef 上。 const TProvider * const 是指向 const TProvider 的指针,但在您的代码中,您正在运行时创建 TProvider 的新实例。您还可以阅读有关 QList 的 Qt 文档:

    QList 的值类型必须是可赋值的数据类型。

    所以你应该有一个指向 TProvider 的指针,你的 typedef 应该是这样的:

    typedef const TProvider * TProviderPointer;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多