オブジェクトのグローバル参照を作成しようとしていますが、失敗したように見えるか、Qt C++ で別のエラーが発生しています。
多くのオブジェクトをメンバーとして保持する「システム」というクラスがあります。システムのメンバーを含むどこからでもシステムのメンバーにアクセスしたい。以下は私のコードです:
// System.h
class System
{
public:
Obj1* m_obj1;
Obj2* m_obj2;
System();
~System();
static System* GetGlobalReference();
}
// System.cpp
static System* GlobalReference = 0;
System::System()
{
if (!GlobalReference) GlobalReference = this;
m_obj1 = new Obj1();
m_obj2 = new Obj2();
}
System* System::GetGlobalReference()
{
return GlobalReference;
}
// main.cpp
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
System* system = new System();
MainWindow window;
window.showMaximized();
return app.exec();
}
//Obj1.h
class Obj1 : public QObject
{
Q_OBJECT
public:
Obj1() : QObject() {}
~Obj1();
public slots:
void Import();
}
// Obj1.cpp
void Obj1::Import()
{
QString path = QFileDialog::getOpenFileName(
0,
QString("Import file..."),
QString("C:\\"),
QString("JPEG File (*.jpg)"),
0,
0);
if (System::GetGlobalReference())
System::GetGlobalReference()->m_obj2->Import(path); // error here
else
// System::GlobalReference is null
}
参照が null ではないようですが、実行時に「アクセス違反の読み取り場所...」というエラーが発生します。何が問題なのですか?
ところで、Obj1 は QObject で、Import メソッドはパブリック スロットですが、これに関連するエラーはありますか?
編集:デバッガーの最後のステップは QGenericAtomic.h にあります
T load(const T &_q_value) Q_DECL_NOTHROW
{
return _q_value; // -> Debugger stops here
}
Edit2:答えが言うようにシングルトンパターンを使用しましたが、私の問題はまだ続きます。
System::GetInstance()->GetObj1()->Import(path); // after this line
「_q_value」には「」と書かれています