Dir*_*irk 18 c++ qt most-vexing-parse
我刚遇到这个问题
error: request for member ‘show’ in ‘myWindow’, which is of non-class type ‘MainGUIWindow()’
Run Code Online (Sandbox Code Playgroud)
当试图编译一个简单的qt应用程序时:
#include <QApplication>
#include "gui/MainGUIWindow.h"
int main( int argc, char** argv )
{
QApplication app( argc, argv );
MainGUIWindow myWindow();
myWindow.show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
我通过替换解决了这个问题
MainGUIWindow myWindow();
Run Code Online (Sandbox Code Playgroud)
通过
MainGUIWindow myWindow;
Run Code Online (Sandbox Code Playgroud)
但我不明白其中的区别.我的问题:有什么区别?
此致,德克
Arm*_*yan 41
其他答案正确地说明括号版本实际上是一个函数声明.要直观地理解它,假设你写的MainGUIWindow f();看起来更像是一个函数,不是吗?:)更有趣的问题是有什么区别
MainGUIWindow* p = new MainGUIWindow;
Run Code Online (Sandbox Code Playgroud)
和
MainGUIWindow* p = new MainGUIWindow();
Run Code Online (Sandbox Code Playgroud)
带括号的版本称为值初始化,而没有括号的版本称为默认初始化.对于非POD类,两者之间没有差异.但是,对于POD结构,值初始化involes将所有成员设置为0,
MY2C
另外:一般来说,如果某些语法结构可以解释为声明和其他内容,编译器总是解决歧义而支持声明.
Max*_*kin 17
下列:
MainGUIWindow myWindow();
Run Code Online (Sandbox Code Playgroud)
声明一个不带参数和返回的函数MainGUIWindow.即myWindow功能名称.
MainGUIWindow myWindow;
Run Code Online (Sandbox Code Playgroud)
另一方面,创建一个myWindow类型的对象MainGUIWindow.
| 归档时间: |
|
| 查看次数: |
12486 次 |
| 最近记录: |