Qt QList <T> casts and node_copy

I will catch the error and have no idea how to fix it. I am making a combobox selector for available SQLDrivers (providers).

Title

#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. Here I am creating two constant pointers to const Providers (TProviderPointer) (listing the available drivers). And I have a method that returns 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;
    }
}

      

when i use this

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

      

I get and point an error to qlist.h and line - const QList<TProviderPointer> list = TProvider::getAvailableProviders();

> C2440 TProviderPointer *

before void *

:

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

      

Do I have a copy operation to use? How can I fix this? Thank.

+3


source to share


1 answer


I think the problem is with your typedef. const TProvider * const

is a pointer to const TProvider

, but in your code, you create new instances TProvider

at runtime. Also you can read in the Qt documentation about QList that:

The QList value type must be an assignable data type.



So, you should have a pointer to TProvider

, and your typedef should look like this:

typedef const TProvider * TProviderPointer;

      

+1


source







All Articles