QMap奇怪的行为

时间:2014-07-06 15:12:47

标签: c++ qt qmap

以这种方式在.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 ;;              ^

问题出在哪里?

3 个答案:

答案 0 :(得分:1)

您需要取消引用map指针。

map = new QMap<QString, QString>;
map["one"] = "foobar";

应该是:

map = new QMap<QString, QString>;
(*map)["one"] = "foobar";

这是因为map是指向对象的指针; *map返回对象的引用。

编译器错误消息不是很有用,因为编译器假定对于指针pp[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";