以这种方式在.h文件中初始化了一个QMap
QMap<QString, QString> *map;
当我在构造函数中声明
时map = new QMap<QString, QString>;
map["one"] = "foobar";
错误:无效类型&#39; QMap * [const char [4]]&#39;对于数组下标 map [&#34; one&#34;] =&#34; foobar&#34 ;; ^
问题出在哪里?
答案 0 :(得分:1)
您需要取消引用map
指针。
map = new QMap<QString, QString>;
map["one"] = "foobar";
应该是:
map = new QMap<QString, QString>;
(*map)["one"] = "foobar";
这是因为map
是指向对象的指针; *map
返回对象的引用。
编译器错误消息不是很有用,因为编译器假定对于指针p
,p[expr]
是array subscript操作。
答案 1 :(得分:0)
map
是一个指针。指针碰巧有内置的operator[]
,这就是为什么错误信息乍一看可能有点奇怪。它实际上与QMaps
的重载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";
答案 2 :(得分:0)
正如其他人所说,如果你以这种方式创作,你必须取消引用地图。但是如果你在堆栈而不是在堆上创建你的地图(删除*),那么它将更容易。
在您的标头文件中:
QMap< QString, QString > map;
在源文件中(删除包含new
关键字的行):
map[ "one" ] = "foobar";