我通过派生类体验过这一点,但它与QDialog基类相同:
当我做
QDialog dialog();
dialog.exec();
Run Code Online (Sandbox Code Playgroud)
编译器抱怨
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()'
Run Code Online (Sandbox Code Playgroud)
这与使用的构造函数有关,因为当我这样做时
QDialog dialog(0);
dialog.exec();
Run Code Online (Sandbox Code Playgroud)
代码编译没有错误.这也有效:
QDialog *dial = new QDialog();
dial->exec();
Run Code Online (Sandbox Code Playgroud)
所以.是因为一个显式的构造函数?
文档称其定义为
QDialog::QDialog ( QWidget * parent = 0, Qt::WindowFlags f = 0 )
Run Code Online (Sandbox Code Playgroud)
那么前两个例子不应该完全一样吗?为什么编译器会抱怨第二行,而不是构造函数.
感谢您的启发,非常欢迎进一步阅读该主题的提示
我有一堆函数和一些别名.我从未想到的是这两个问题:
export EDITOR="emacsclient -t"
alias vi='$EDITOR'
alias pa='ps ax | egrep -i '
Run Code Online (Sandbox Code Playgroud)
当我进入
pa vi
Run Code Online (Sandbox Code Playgroud)
我明白了
egrep: invalid option -- 't'
Run Code Online (Sandbox Code Playgroud)
显然,"vi"在另一个别名内部扩展,即使它不在行的开头.为什么这样,我能做些什么呢?
要仔细检查,这个:
ps ax | egrep vi
Run Code Online (Sandbox Code Playgroud)
正确执行.bash --version GNU bash,版本4.3.11(1)-release(x86_64-pc-linux-gnu)