我发现一个错误,不知道如何解决。我正在为可用的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提供程序(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();
- > C2440TProviderPointer *
到void *
行:
Q_INLINE_TEMPLATE void QList<T>::node_copy(Node *from, Node *to, Node *src)
使用中是否有任何复印操作?我怎样才能解决这个问题?谢谢。
我认为问题出在您的typedef。const TProvider * const
是指向的指针,const TProvider
但是在您的代码中您正在TProvider
运行时创建新的实例。您也可以在Qt文档中阅读有关QList的内容:
QList的值类型必须是可分配的数据类型。
所以你应该有一个指向TProvider
,你的typedef应该像:
typedef const TProvider * TProviderPointer;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句