以这种方式在.h文件中初始化一个QMap之后
QMap<QString, QString> *map;
当我在构造函数中声明
map = new QMap<QString, QString>;
map["one"] = "foobar";
错误:数组下标映射[“one”] =“foobar”的无效类型'QMap * [const char [4]]';^
问题出在哪里?
您需要取消引用map
指针。
map = new QMap<QString, QString>;
map["one"] = "foobar";
应该:
map = new QMap<QString, QString>;
(*map)["one"] = "foobar";
这是因为map
是指向对象的指针;*map
返回对对象的引用。
编译器错误消息不是很有帮助,因为编译器假定对于指针p
,p[expr]
是数组下标操作。
map
是一个指针。指针恰好有一个内置的operator[]
,这就是为什么错误消息乍一看可能看起来有点奇怪的原因。QMaps
实际上,它与's 的重载无关operator[]
。
考虑一下:
int array[123];
array["one"] = "foobar";
它会产生同样的错误:
error: invalid types ‘int [123][const char [4]]’ for array subscript
array["one"] = "foobar";
要获得指向类型(QMap
在这种情况下),您必须取消引用指针:*map
。
然后它将正常工作:
(*map)["one"] = "foobar";
正如其他人所说,如果您以这种方式创建,则必须取消引用地图。但是,如果您在堆栈上而不是在堆上创建地图(删除 *),那么它会更容易。
在你的头文件中:
QMap< QString, QString > map;
在您的源文件中(删除带有new
关键字的行):
map[ "one" ] = "foobar";