Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QMap返回作为参考的问题?_C++_Qt_Reference_Qmap - Fatal编程技术网

C++ QMap返回作为参考的问题?

C++ QMap返回作为参考的问题?,c++,qt,reference,qmap,C++,Qt,Reference,Qmap,大家好, 我有一个代码片段,如下所示: class AppCtx { private: QMap<QString,IRzPlugin*> pluginsMap; public : void addPlugin(IRzPlugin *plugin) { pluginsMap.insert(plugin->getPluginUID(),plugin); } QMap<QString,IRzPlugin*> & getPlugins() {

大家好,

我有一个代码片段,如下所示:

class AppCtx {

private:
 QMap<QString,IRzPlugin*> pluginsMap;

public :
 void addPlugin(IRzPlugin *plugin)
 {
   pluginsMap.insert(plugin->getPluginUID(),plugin);
 }

 QMap<QString,IRzPlugin*> & getPlugins()
 {
  return pluginsMap;
 }
}
类AppCtx{ 私人: QMap-pluginsMap; 公众: void addPlugin(IRzPlugin*插件) { 插入(plugin->getPluginUID(),plugin); } QMap&getPlugins() { 返回pluginsMap; } } 在我的客户机代码中,我访问QMap如下。但应用程序中断 它访问“plugins.size()”的位置

class主窗口
.
.
{
无效注册表项列表(AppCtx*AppCtx)
{
QMap plugins=appctx->getPlugins();
qDebug(“插件数量%d”,plugins.size());//在此处中断
QList listPlugins=plugins.values();
对于(int i=0;isize;}
(gdb)返回
#QMap::size中的0 0x0000000000406ba1(此=0x405c2b)
at/opt/qtsdk-2010.02/qt/include/QtCore/qmap.h:178
#主窗口中的1 0x0000000000406736::registerPlugins(此=0x7fff0d7c98f0)
at/work/svn checkout/osaka3d/osaka3d/tags/iter07/prototype/osaka3d/rinzo/ui/mainwindow.cpp:23
}
有什么建议吗

提前感谢,,
umanga

我注意到您正在使用

QMap<QString,IRzPlugin*> plugins=appctx->getPlugins();
QMap-plugins=appctx->getPlugins();
我想你想引用它,比如

QMap<QString,IRzPlugin*>& plugins=appctx->getPlugins();
QMap&plugins=appctx->getPlugins();
如果你只需要一个对const的引用,那么声明它是隐式共享的,所以这没什么大不了的

如果这有助于解决您的问题,那么它必须与复制
QMap
有关

编辑


由于这对您的问题没有帮助,我认为您需要检查传递到
registerPlugins
的指针
appctx
,并检查它是否指向有效对象。

我注意到您正在使用

QMap<QString,IRzPlugin*> plugins=appctx->getPlugins();
QMap-plugins=appctx->getPlugins();
我想你想引用它,比如

QMap<QString,IRzPlugin*>& plugins=appctx->getPlugins();
QMap&plugins=appctx->getPlugins();
如果你只需要一个对const的引用,那么声明它是隐式共享的,所以这没什么大不了的

如果这有助于解决您的问题,那么它必须与复制
QMap
有关

编辑


由于这对您的问题没有帮助,我认为您需要检查传递到
registerPlugins
的指针
appctx
,并检查它是否指向有效对象。

如果您不打算更改映射,也不必返回对映射的引用,因为Qt对大多数对象使用写时复制机制。这意味着,在您实际更改某些内容之前,如果构造是QMap的副本,则数据不会重复。如果您不打算更改映射,则也无需返回对映射的引用,因为Qt对大多数对象使用写入时复制机制。这意味着,如果构造是QMap的副本,则数据不会重复,直到您实际上改变了一些东西。谢谢你的回答,我用你的方法把“pluginsMap”变成了指针(*pluginsMap)。但仍然是同一个问题。@umanga:在这种情况下,您应该查看传递到
registerPlugins
的指针
appctx
,并检查它是否指向有效的对象。它可能未初始化,指向已删除的内存,或者以其他方式损坏。感谢Troubador提供的提示。这就是问题所在,它是未初始化的已初始化!感谢您的回答,我使用您的方法将“pluginsMap”更改为指针(*pluginsMap)。但仍然是同一个问题。@umanga:在这种情况下,您应该查看传递到
registerPlugins
的指针
appctx
,并检查它是否指向有效的对象。它可能未初始化,指向已删除的内存,或者以其他方式损坏。感谢Troubador提供的提示。这就是问题所在,它是未初始化的初始化!