0

私はC++について何かを理解していないと思います:

私はこのコードを持っています:

#include "window.h"

int main(int argc, char* argv[]) {
    Gtk::Main kit(argc, argv);
    window win();
    Gtk::Main::run(win);

    return EXIT_SUCCESS;
}

'window'は、空のコンストラクターを持つGtk::Windowから継承するクラスです。このコードをコンパイルしようとすると、次のエラーが発生します。

no matching function for call to ‘Gtk::Main::run(window (&)())

ただし、行を変更すると、次のようになります。

window win();

window win;

その後、コードがコンパイルされます。括弧の有無はどのように変化しますか?私は以前にこれに遭遇したことがあり、何が起こっているのか理解できませんでした。何が起こっていますか?

4

1 に答える 1

2

なぜならwindow win();、はパラメータを受け取らず、を返す関数の宣言だからwindowです。(したがって、window (&)()そのタイプである、の一致する呼び出しがないというエラーが表示されます。)

これは「最も厄介な解析」として知られています。

于 2010-07-22T16:03:00.330 に答える