2012-02-25 15 views
0

次のプログラムを作成しましたが、エラーが発生しました。私は約3時間で無駄なエラーを探しました。あなたと一緒に問題を話したいと思います。 私はエラーが取得しています: '{' トークン継承エラー

#ifndef ASKDIALOG_H  
#define ASKDIALOG_H 

#include <QDialog> 
#include "umerwindow.h"  

namespace Ui {  
class AskDialog;  
} 

class AskDialog : public QDialog, public UmerWindow // HERE IS THE ERROR  
{ 
Q_OBJECT  

public: 
explicit AskDialog(QWidget *parent = 0);  
void showdialog();  
~AskDialog();  

private slots:  
void on_dokbutton_clicked();  

private:  
Ui::AskDialog *ui;  
}; 

#endif // ASKDIALOG_H  

DIALOG .cppファイルをASK

#include "askdialog.h"  
#include "ui_askdialog.h"  

AskDialog::AskDialog(QWidget *parent) : 
QDialog(parent),  
ui(new Ui::AskDialog)  
{ 
ui->setupUi(this);  
} 

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

void AskDialog::on_dokbutton_clicked()  
{ 
QString data=ui->dline->text();  
showlist(data);  
} 

前に予想されるクラス名をDIALOG .cppファイルをASK

#include "askdialog.h"  
#include "ui_askdialog.h"  

AskDialog::AskDialog(QWidget *parent) : 
QDialog(parent),  
ui(new Ui::AskDialog)  
{ 
ui->setupUi(this);  
} 

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

void AskDialog::on_dokbutton_clicked()  
{ 
QString data=ui->dline->text(); 
showlist(data);  
} 

[OK]を、このようにUmerWindowのヘッダファイル

#ifndef UMERWINDOW_H 
#define UMERWINDOW_H 

#include <QMainWindow> 
#include <QListWidgetItem> 
#include "askdialog.h" 

namespace Ui { 
class UmerWindow; 
} 

class UmerWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit UmerWindow(QWidget *parent = 0); 
    ~UmerWindow(); 
protected: 
    void showlist(QString &); 

private slots: 
void on_actionAdd_Item_triggered(); 

private: 
    Ui::UmerWindow *ui; 
    QListWidgetItem *itm; 
    AskDialog *dialog; 
}; 

、これは私がこの問題を解決するために何をすべきUmerWIndow

#include "umerwindow.h" 
#include "ui_umerwindow.h" 
#include "askdialog.h" 
#include <QListWidgetItem> 

UmerWindow::UmerWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::UmerWindow) 
{ 
    ui->setupUi(this); 
    dialog= new AskDialog(this); 
} 

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

void UmerWindow::on_actionAdd_Item_triggered() 
{ 
    dialog->show(); 
} 
void UmerWindow::showlist(QString &data) 
{ 

} 

の.cppファイルのですか?助けてください。

PS:私も継承せずに試してみました、コンパイラは私に奇妙なエラーを与える:ISO C++が無いタイプで「UmerWindow」の宣言を禁じエラー:予想「;」 before '' token *私はaskdialog.hファイルにUmerWindowのポインタオブジェクトを作成します。今私は何をすべきですか?

+0

これらの文字は何ですか? –

+1

Umerwindow.hクラス宣言のクラス宣言の最後に ';'がないか、 'AskDialog'を前方に宣言しているのはなぜですか? – Naveen

+0

私は彼が意図したことは、すべての一重引用符を削除してからコンパイルしてみることです。 – bluefalcon

答えて

0

error: expected class-name before '{' token

私の遠隔のエラー解決スキルから、あなたは継承している間違ったクラス名を与えているように感じます。クラス名がUmerWindowまたはumerWindowまたはumerwindowまたはUmerwindowかどうかを確認します。継承中にコンパイラがあなたのケースで識別子UmerWindowを理解していません。ヘッダー"umerwindow.h"に移動して、クラス名が正確であるかどうかを確認します。

+0

私はクラス名を正しく綴っています。それはUmerWindowですが、なぜ私にエラーが出るのか分かりません。 – scorpion

2

あなたによれば、UmerWindowは基本的にQt作成者が作成する典型的なMainWindowであり、QMainWindowがQObjectを継承していることを知っているかもしれません.QDialogも同様です。

したがって、クラスAskDialogは、QDialogとUmerWindowの2つのQObjectサブクラスから継承します。これはサポートされていません!

+0

OKです。しかし、私は継承せずに試してみましたが、コンパイラは私に奇妙なエラーを与えます: ISO C++は型なしの 'UmerWindow'の宣言を禁じています と エラー: before '*'トークン 私はaskdialog.hファイルにUmerWindowのポインタオブジェクトを作成します。 どうすればいいですか? – scorpion

0

コンパイラがクラスUmerWindowを知らないようです。あなたはそれを前方宣言しようとしましたか?

#include "umerwindow.h"  
class UmerWindow; 

また、Qtによって作成されたクラスの場合は、Ui名前空間にある可能性があります。その場合、クラス宣言でフルネームを使用してみてください:

class AskDialog : public QDialog, public Ui::UmerWindow 
1

古典的な循環参照問題のように見えます。これはumerwindow.hファイルで行いました。

#include "askdialog.h" 

問題は、あなたが前方UmerWindowを宣言し、この前にやりましたさ。したがって、#defineがすでに作成されているため、askdialog.hの#include "umerwindow.h"には何の影響もありません。

この#includeの代わりに、__qualwindow.hのクラスAskDialogを先に宣言してください。

+0

私はそれを試みたが無益だった。 – scorpion