Qt QList<T>演员阵容和node_copy

Qt QList<T> casts and node_copy

本文关键字:node copy lt QList gt Qt      更新时间:2023-10-16

我发现一个错误,不知道如何修复它。我正在为可用的 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。在这里,我创建了两个指向常量提供程序(TProviderPointer)(枚举可用驱动程序)的常量指针。我有一个方法,返回常量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<TProviderPointer> list = TProvider::getAvailableProviders(); -> C2440 TProviderPointer *void *行:

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

我是否有任何复制操作正在使用?我该如何解决这个问题?谢谢。

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

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

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

typedef const TProvider * TProviderPointer;