Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 没有参数的QDialog显式构造函数-如何正确使用?_C++_Qt_Constructor_Explicit_Qdialog - Fatal编程技术网

C++ 没有参数的QDialog显式构造函数-如何正确使用?

C++ 没有参数的QDialog显式构造函数-如何正确使用?,c++,qt,constructor,explicit,qdialog,C++,Qt,Constructor,Explicit,Qdialog,我在派生类中遇到过这种情况,但在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

我在派生类中遇到过这种情况,但在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 )
那么前两个例子不应该完全相同吗?为什么编译器在第二行抱怨,而不是有构造函数的那一行

感谢您的启发,欢迎您进一步阅读本主题的提示

QDialog dialog;
是使用默认构造函数在堆栈上创建
QDialog
的正确语法。

QDialog dialog()

这声明了一个名为dialog的函数,该函数不接受任何内容并返回
QDialog

如果这让您感到惊讶,那么假设您将变量命名为f而不是dialog。我们得到了什么

QDialog f()

现在看起来更像一个函数,不是吗?:)

你需要


QDialog对话框


通常,当某些内容可以解释为声明或其他内容时,编译器总是会解决歧义,以支持声明

,正如答案所示,这不是Qt或QDialog类特有的问题。调用C++中没有参数的构造函数的语法不同于C,C。您必须省略括号,否则编译器会认为您在声明函数。顺便说一句,您误用了术语
显式构造函数
。这里有一句话要读:谢谢,当你单独看这一行时,我应该想到这一点,这似乎很明显。非常感谢,我不知道