fri*_*ann 4 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 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();
这声明了一个名为dialog的函数,它不带任何东西并返回一个 QDialog
如果您感到惊讶,假设您将变量f命名为对话框而不是对话框.我们得到了什么?
QDialog f();
现在看起来更像是一个功能,不是吗?:)
你需要
QDialog dialog;
总是,当某些东西可以被解释为声明和其他东西时,编译器总是解决歧义,而不是声明