Difference between creating object with () or without
c++, most-vexing-parse, qt
Solution
The other answers correctly state that the parentheses version is actually a function declaration. To understand it intuitively, suppose you wrote `MainGUIWindow f();` Looks more like a function, doesn't it? :) The more interesting question is what is the difference between
MainGUIWindow* p = new MainGUIWindow;
and
MainGUIWindow* p = new MainGUIWindow();
The version with parentheses is called value-initialization, whereas the version without is called default-initialization. For non-POD classes there is no difference between the two. For POD-structs, however, value-initialization involves setting all members to 0,
my2c
Addition: In general, if some syntactic construct can be interpreted both as a declaration and something else, the compiler always resolves the ambiguity in favor of the declaration.
Problem
i just run into the problem ``` error: request for member ‘show’ in ‘myWindow’, which is of non-class type ‘MainGUIWindow()’ ``` when trying to compile a simple qt-application: ``` #include <QApplication> #include "gui/MainGUIWindow.h" int main( int argc, char** argv ) { QApplication app( argc, argv ); MainGUIWindow myWindow(); myWindow.show(); return app.exec(); } ``` I solved this by replacing ``` MainGUIWindow myWindow(); ``` by ``` MainGUIWindow myWindow; ``` but I don't understand the difference. My question: What is the difference? Regards, Dirk