2016-04-30 1 views
0

staticメタオブジェクトにアクセスすることができず、その理由を知りません。私はいくつかの助けが必要です。staticメタオブジェクトにアクセスできない

は、ここでは、コード

は、2つのエラーがあるさ:

staticMetaObject is not a member of MainWIndow* 

それはリストとは何かを持っているような気がしますが、私はよく分かりません。

#ifndef FORM_H 
#define FORM_H 
#include <QObject> 
#include <QDebug> 

class FormBase : public QObject 
{ 
    Q_OBJECT 
public: 
    FormBase() {} 
}; 

template <typename T> 
class Form : public FormBase, public QList<T> 
{ 
public: 
    Form(T a) 
    { 
     QList<T>::append(a); 
    } 

    void myFunc() 
    { 
     qDebug() << T::staticMetaObject.className(); 
    } 
}; 

#endif // FORM_H 

答えて

1

form.h

mainwindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include "form.h" 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

    Form<MainWindow*>* form; 

private slots: 
    void on_pushButton_clicked(); 

private: 
    Ui::MainWindow *ui; 
}; 

#endif // MAINWINDOW_H 

mainwindow.cpp

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QDebug> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    /*qDebug() << MainWindow::staticMetaObject.className(); 

    if (QString(MainWindow::staticMetaObject.className()) == QString("MainWindow")) { 
     qDebug() << "test"; 
    }*/ 

    form = new Form<MainWindow*>(this); 

} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

void MainWindow::on_pushButton_clicked() 
{ 
    form->myFunc(); 
} 

あなたはあなたの混乱の種類を取得しています。

あなたは、あなたがQList<T*>をしたいことを意味し

T::staticMetaObject.className() 

を行うことができるようにTMainWindowになりたいです。

class FormBase : public QObject 
{ 
    Q_OBJECT 
public: 
    FormBase() {} 
}; 

template <typename T> 
class Form : public FormBase, public QList<T*> 
{ 
public: 
    Form(T* a) 
    { 
     append(a); 
    } 

    void myFunc() 
    { 
     qDebug() << T::staticMetaObject.className(); 
    } 
}; 

class MainWindow: 
    public QMainWindow 
{ 
    MainWindow() 
    { 
     form = new Form<MainWindow>(this); 
    } 

    FormBase* form; 
}; 
+0

私はあなたがそれを意味するか知らない:あなただけの次のコードは、罰金コンパイル

append(a); 

を呼び出すことができますので、あなたはそれから派生します。私は<>を記入する必要がありますか、コンパイルエラー(Formの前に予想される指定子)が表示されます。あなたはTがT *であり、なぜstaticMetaObjectが動作していないのかが問題であるということは間違いありません。しかし、私はあなたの答えを理解していない – Invader

+0

私はフォームの前にエラーが予想される指定を取得します。私は親としてこれを望んでいない、多分あなたはmissundernadです。私はそれをリストのポインタとして使いたい。 – Invader

+0

ああ:あなたのコードを変更し続けます。私は調整します。それのために – Thomas

関連する問題