2014-12-01 24 views
3

我捕獲錯誤,不知道如何解決它。我正在爲可用的SQLDrivers(提供者)進行組合框選擇器。的Qt的QList <T>鑄件和node_copy

部首

#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)(枚舉可用驅動程序)。我有一個方法,返回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) 

我是否有任何副本使用中的操作?我怎樣才能解決這個問題? 謝謝。

回答

1

我認爲問題在於你的typedef。 const TProvider * const是指向const TProvider的指針,但在您的代碼中,您正在運行時創建TProvider的新實例。你也可以閱讀有關QList的Qt文檔:

QList的值類型必須是可指定的數據類型。

所以,你應該有一個指針TProvider和你的類型定義應該是這樣的:

typedef const TProvider * TProviderPointer;