4

派生クラスでこれを経験しましたが、QDialog 基本クラスでも同じです:

私がする時

QDialog dialog();
dialog.exec();

コンパイラが文句を言う

J:\...\mainwindow.cpp:-1: In member function 'void MainWindow::on_viewButton_pressed()':
J:\...\mainwindow.cpp:72: Fehler:request for member 'exec' in 'dialog', which is of non-class type 'QDialog()'

これは、使用されているコンストラクターと関係があります。

QDialog dialog(0);
dialog.exec();

コードはエラーなしでコンパイルされます。これも機能しています:

QDialog *dial = new QDialog();
dial->exec();

そう。明示的なコンストラクターが原因ですか?

ドキュメンテーションは、それが次のように定義されていると言います

QDialog::QDialog ( QWidget * parent = 0, Qt::WindowFlags f = 0 )

では、最初の 2 つの例はまったく同じではないでしょうか? そして、コンパイラーがコンストラクターの行ではなく、2行目に文句を言うのはなぜですか。

啓発をありがとう、トピックに関するさらなる読書へのヒントは大歓迎です

4

2 に答える 2

8

QDialog dialog();

これは、何も受け取らずにを返すdialogという名前の関数を宣言します。QDialog

それがあなたを驚かせるなら、あなたがダイアログの代わりにあなたの変数にfという名前を付けたとしましょう。私たちは何を得るのですか?

QDialog f();

今では関数のように見えますね。:)

あなたが必要です

QDialog dialog;

常に、何かが宣言と他の何かとして解釈できる場合、コンパイラは常に宣言を優先してあいまいさを解決します

于 2011-06-25T14:04:09.510 に答える
2
QDialog dialog;

QDialogは、デフォルトのコンストラクターを使用してonスタックを作成するための正しい構文です。

于 2011-06-25T14:04:08.560 に答える