Q捕捉奇怪的行为

QMap strange behaviour

本文关键字:      更新时间:2023-10-16

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

QMap<QString, QString> *map;

当我在构造函数中声明时

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

错误:数组下标的类型"QMap*[cust char[4]"无效map["one"]="foobar";^

问题出在哪里?

您需要取消引用map指针。

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

应为:

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

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

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

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";

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

在您的头文件中:

QMap< QString, QString > map;

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

map[ "one" ] = "foobar";
相关文章:
  • 没有找到相关文章