试图编译以下代码Qt的SDK 4.7.4下桌面 - MinGW的4.4结果在编译错误下面:为什么我不能在这样的QMap上调用插入?
#include <QtCore/QCoreApplication>
#include <QMap>
struct Buffer
{
char data[4];
};
// A Bucket needs to reserve 16 chars worth of Buffers
typedef Buffer Bucket[(16 * (sizeof (char)))/(sizeof (Buffer))];
typedef QMap<QString, Bucket *> BucketMap;
int main(int argc, char *argv[])
{
BucketMap bucket;
bucket.insert(QString("foo"), new Bucket()); //compile error
return 0;
}
../test/main.cpp: In function 'int main(int, char**)':
../test/main.cpp:13: error: no matching function for call to 'QMap<QString, Buffer (*)[4]>::insert(QString, Buffer*)'
../../../QtSDK/Desktop/Qt/4.7.4/mingw/include/QtCore/qmap.h:556: note: candidates are: QMap<Key, T>::iterator QMap<Key, T>::insert(const Key&, const T&) [with Key = QString, T = Buffer (*)[4]]
mingw32-make.exe[1]: *** [debug/main.o] Error 1
mingw32-make.exe: *** [debug] Error 2
我曾尝试使用std::string
转换这对一个quivalent示例和std::map
具有相同的效果。我提供了Qt版本,因为它更紧凑,并且最终是我的项目需要的形式。
我在猜测,我只是错过了一些关于如何最终解释typedef
。为什么insert
显然是Buffer *
(不是Buffer(*)[4]
)的第二个参数,我该如何解决?
为什么使用typedef?为什么不创建一个新的Bucket类?好像你正在尝试将它用作对象。 – 2012-02-08 23:09:50