gpt4 book ai didi

c++ - QMap 返回作为引用有问题吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:24:39 26 4
gpt4 key购买 nike

大家好

我有一个代码片段如下:

class AppCtx {

private:
QMap<QString,IRzPlugin*> pluginsMap;

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

QMap<QString,IRzPlugin*> & getPlugins()
{
return pluginsMap;
}
}

在我的客户端代码中,我按如下方式访问 QMap。但是应用程序中断了它访问“plugins.size()”的位置

class MainWindow
.
.

{
void registerPlugins(AppCtx *appctx)
{
QMap<QString,IRzPlugin*> plugins=appctx->getPlugins();

qDebug("Num of plugins %d",plugins.size()); //Breaks here

QList<IRzPlugin*> listPlugins=plugins.values();

for(int i=0;i<listPlugins.size();i++)
{

}
}

调试信息如下:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fff057a16f0 (LWP 9069)]
0x0000000000406ba1 in QMap<QString, IRzPlugin*>::size (this=0x405c2b)
at /opt/qtsdk-2010.02/qt/include/QtCore/qmap.h:178
178 inline int size() const { return d->size; }
(gdb) back
#0 0x0000000000406ba1 in QMap<QString, IRzPlugin*>::size (this=0x405c2b)
at /opt/qtsdk-2010.02/qt/include/QtCore/qmap.h:178
#1 0x0000000000406736 in MainWindow::registerPlugins (this=0x7fff0d7c98f0)
at /work/svn-checkout/osaka3d/osaka3d/tags/iter07/prototype/osaka3d/rinzo/ui/mainwindow.cpp:23


}

有什么建议吗?

提前致谢,乌漫画

最佳答案

我注意到你正在复制 QMap

QMap<QString,IRzPlugin*> plugins=appctx->getPlugins();

我假设您想引用它,即

QMap<QString,IRzPlugin*>& plugins=appctx->getPlugins();

如果你只需要一个常量引用那么docs说它是隐式共享的,所以没什么大不了的。

如果这对您的问题有帮助,那么它一定与复制 QMap 有关。

编辑

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

关于c++ - QMap 返回作为引用有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3164237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com