我发现一个错误,不知道如何解决。我正在为可用的SQLDrivers(提供程序)选择组合框选择器。

header

#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提供程序(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<TProviderPointer> list = TProvider::getAvailableProviders();行-> C2440 TProviderPointer *void *行:
Q_INLINE_TEMPLATE void QList<T>::node_copy(Node *from, Node *to, Node *src)

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

最佳答案

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



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

typedef const TProvider * TProviderPointer;

关于c++ - Qt QList <T>强制转换和node_copy,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27232406/

10-09 07:34