OK、私はQtとC++の両方に新しいことがあります。私はQMetaTypeを自分のクラスと一緒に使ってみようとしています。サブクラスを扱うことができません。ここで(申し訳ありませんが、問題のトンは、おそらくそこにいる)私が持っているものです。QMetaTypeと継承
testparent.h:
#include <QMetaType>
#include "testparent.h"
class Test1 : public TestParent
{
public:
Test1();
~Test1();
Test1(const Test1 &t);
int getSomething(); // int test1.cpp, just one line returning 67
};
Q_DECLARE_METATYPE(Test1)
...(ない限り:
#include <QMetaType>
class TestParent
{
public:
TestParent();
~TestParent();
TestParent(const TestParent &t);
virtual int getSomething(); // in testparent.cpp, just one line returning 42
int getAnotherThing(); // in testparent.cpp, just one line returning 99
};
Q_DECLARE_METATYPE(TestParent)
そして、ここではtest1.hですここで宣言されているすべてのメンバーは、testparent.cppまたはtest1.cppに何もしない(単にカッコを入れ、ブラケットを閉じる)と定義されています)main.cpp:
#include <QtGui/QApplication>
#include "test1.h"
#include "testparent.h"
#include <QDebug>
int main(int argc, char *argv[])
{
int id = QMetaType::type("Test1");
TestParent *ptr = new Test1;
Test1 *ptr1 = (Test1*)(QMetaType::construct(id));
// TestParent *ptr2 = (TestParent*)(QMetaType::construct(id));
qDebug() << ptr->getSomething();
qDebug() << ptr1->getSomething(); // program fails here
// qDebug() << ptr2->getAnotherThing();
// qDebug() << ptr2->getSomething();
delete ptr;
delete ptr1;
// delete ptr2;
return 0;
}
私はptr2でいくつかの多型をテストしようとしていましたが、ptr1が機能しないことに気付きました。 (EDIT:問題が解決されました(編集:nvmは意味をなさない))これを実行すると、最初のqDebugが67のように印刷され、数秒間スタックされてしまいます。コード-1073741819で終了します。
ありがとうございます。
感謝を!私は馬鹿だと感じる。 – JohnJamesSmith0