C++ 没有参数的QDialog显式构造函数-如何正确使用?
我在派生类中遇到过这种情况,但在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 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。您必须省略括号,否则编译器会认为您在声明函数。顺便说一句,您误用了术语显式构造函数
。这里有一句话要读:谢谢,当你单独看这一行时,我应该想到这一点,这似乎很明显。非常感谢,我不知道