問題があります。私は何か本当にばかなことをやっていると思います。私はC++とQtの新人です。QMapに項目を追加できません
私はクラスSavedVarを持っています。プライベートメンバーのQmapにキー/値を追加しようとしています。 SavedVar :: addVar()を呼び出すと、プログラムがクラッシュします。 SavedVar :: addvar()は 'id'と 'notes'を正しく受け取っています。私はQtのクリエイターでデバッグ出力を理解するのに苦労してい
#include <QObject>
#include <QMap>
#include "variation.h"
#include <QTableWidget>
#include "mainwindow.h"
class SavedVar : public QObject
{
Q_OBJECT
public:
explicit SavedVar(QObject *parent = 0);
void addVar(QString id, QString notes);
void saveVar(QString varText);
void removeSavedVar(QList <QTableWidgetItem*> &varList);
QString generateSaveFile();
void loadVarFile(QString filename);
const QMap<QString, QString>*getVmapPtr();
private:
QMap <QString, QString> vmap;
};
void SavedVar::addVar(QString id, QString notes)
{
vmap[id]= notes;
}
:
0 QBasicAtomicInt::operator!= qbasicatomic.h 75 0x4116e3
1 QMap<QString, QString>::detach qmap.h 202 0x41ede2
2 QMap<QString, QString>::operator[] qmap.h 526 0x41d241
3 SavedVar::addVar savedvar.cpp 17 0x44afc9
4 SavedVar::loadVarFile savedvar.cpp 82 0x44b4b8
5 MainWindow::load_data mainwindow.cpp 190 0x40d5fe
乾杯、
ニール
「QString」などの重い*オブジェクトは、値ではなく参照やポインタで渡す必要があります。それを除けば、私はあなたの問題のヒントを与えるそのコード内の何も見ることができません。問題はコードの別の部分にあるようです。たとえば、不正な形や空の場合など、 'addVar'を入力する文字列を確認してください。 –
@Diego Devilla:投稿されたコードに間違いがないようです。参照やポインタによるQStringの格納は、必要ありません。 QStringは暗黙的な共有(コピーオンライト)を使用します。 –
'SavedVar :: loadVarFile'は' addVar'呼び出しまで、 'MainWindow :: load_data'は' loadVarFile'呼び出しまで見ることができますか?これは 'addVar'を悪い' this'ポインタで呼び出している可能性があり、コードはクラッシュする前に関数呼び出しをいくつか追加します。 –