Q捕捉奇怪的行为
QMap strange behaviour
以这种方式在.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
返回对该对象的引用。
编译器错误消息没有太大帮助,因为编译器假定对于指针p
,p[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";
相关文章:
- 没有找到相关文章