Я испытал это с производным классом, но то же самое с базовым классом 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 )
Так не должны ли первые два примера делать то же самое? И почему компилятор ругается на вторую строчку, а не на ту, что с конструктором.
Спасибо за просвещение, очень приветствуются подсказки для дальнейшего чтения по теме
explicit constructor
. Вот что можно прочитать: msdn.microsoft.com/en-us/library/h1y7x448 .aspx - person Armen Tsirunyan   schedule 25.06.2011