c++ 关联容器的错误行为:std::map,QMap [已关闭]

n3h0vuf2  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(209)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答复。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
7天前关闭
Improve this question
我的问题是:
我写了一个Qt 5.15.5的GUI程序。我有一个类TrackBuilder,其字段为std::map<int, int> map;QMap<int, int> map;。这个类还包含一个函数void setCommonTestStuff();,当它从button得到一个信号时,其他类,特别是QMainWindow,会调用这个函数。所以,问题是当我试图在构造函数中向map添加项时,如果map是std::map,则map[1] = 1,或者如果是QMap,则使用map.insert(1,1),一切都很好。但是当我在函数中做同样的事情时,我的程序崩溃了,因为它收到了来自操作系统的信号,正如调试器所说的那样。在QMap的情况下,使用调试器我看到,程序在调用qmap.h调用的detach()方法时崩溃,因为它检查到某些变量ref不等于1。
代码在这里:TrackBuilder.h

#include <QMap>
#include <map>

class TrackBuilder
{
public:
    TrackBuilder(const char* fileNameLocators);
    virtual ~TrackBuilder(void);

    void setCommonTestStuff();

    QMap<int, int> q_map;
    std::map<int, int> map;
}

TrackBuilder.cpp

#include "TrackBuilder.h"

TrackBuilder::TrackBuilder(const char* fileNameLocators)
    : m_fileNameLocators(fileNameLocators)
{
    // In this case everything works
    // map[1] = 1;
    // map[2] = 2;
}

TrackBuilder::~TrackBuilder(void)
{
}

void TrackBuilder::setCommonTestStuff()
{
    // But here it crashes
    map[2] = 3;

    // And in this case too
    // q_map.insert(1, 1);
}

我不知道发生了什么,因为只有当我试图在其他成员函数中添加map中的项目时,才会发生这种情况。
有人能解释一下我做错了什么吗?

4zcjmb1e

4zcjmb1e1#

天啊...
@PaulMcKenzie是对的,我只是没有在MainWindow示例中初始化我的TrackBuilder *m_trackBuilder字段。
看起来窗外已经太晚了。。为了工作
谢谢大家的回答。

相关问题