**已关闭。**此问题为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中的项目时,才会发生这种情况。
有人能解释一下我做错了什么吗?
1条答案
按热度按时间4zcjmb1e1#
天啊...
@PaulMcKenzie是对的,我只是没有在
MainWindow
示例中初始化我的TrackBuilder *m_trackBuilder
字段。看起来窗外已经太晚了。。为了工作
谢谢大家的回答。