-1

以这种方式在.h文件中初始化一个QMap之后

QMap<QString, QString> *map;

当我在构造函数中声明

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

错误:数组下标映射[“one”] =“foobar”的无效类型'QMap * [const char [4]]';^

问题出在哪里?

4

3 回答 3

1

您需要取消引用map指针。

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

应该:

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

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

编译器错误消息不是很有帮助,因为编译器假定对于指针pp[expr]数组下标操作。

于 2014-07-06T15:19:31.003 回答
0

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";
于 2014-07-06T15:22:37.620 回答
0

正如其他人所说,如果您以这种方式创建,则必须取消引用地图。但是,如果您在堆栈上而不是在堆上创建地图(删除 *),那么它会更容易。

在你的头文件中:

QMap< QString, QString > map;

在您的源文件中(删除带有new关键字的行):

map[ "one" ] = "foobar";
于 2015-05-26T15:02:46.240 回答