我只是遇到了问题
error: request for member ‘show’ in ‘myWindow’, which is of non-class type ‘MainGUIWindow()’
当尝试编译一个简单的 qt 应用程序时:
#include <QApplication>
#include "gui/MainGUIWindow.h"
int main( int argc, char** argv )
{
QApplication app( argc, argv );
MainGUIWindow myWindow();
myWindow.show();
return app.exec();
}
我通过替换解决了这个问题
MainGUIWindow myWindow();
通过
MainGUIWindow myWindow;
但我不明白其中的区别。我的问题:有什么区别?
问候, 德克
最佳答案
其他答案正确地指出括号版本实际上是一个函数声明。为了直观的理解,假设你写的 MainGUIWindow f();
看起来更像是一个函数,不是吗? :)
更有趣的问题是两者有什么区别
MainGUIWindow* p = new MainGUIWindow;
和
MainGUIWindow* p = new MainGUIWindow();
带括号的版本称为值初始化,而没有括号的版本称为默认初始化。对于非 POD 类,两者之间没有区别。然而,对于 POD 结构,值初始化涉及将所有成员设置为 0,
my2c
补充:一般来说,如果某些句法构造既可以解释为声明也可以解释为其他内容,编译器总是会解决歧义,支持声明。
关于c++ - 使用 () 或不使用创建对象的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116541/