gpt4 book ai didi

c++ - 为什么我不能调用 QWidget::isVisible() 的继承版本?

转载 作者:行者123 更新时间:2023-11-28 03:13:52 27 4
gpt4 key购买 nike

我有一个 MyDialog 类,它是 QDialog 的子类,它本身是 QWidget 的子类。所以它看起来像这样:

QObject
|
V
QWidget
|
V
QDialog
|
V
MyDialog

MyDialog 类有一个静态方法static bool isVisible( MyObject *myObject )。它还从它的父级继承了一个实例方法:QWidget::isVisible()

在 MyDialog.h 中:

class MyDialog : public QDialog
{
static bool isVisible( MyObject *myObject );

MyDialog *getInstance( MyObject *myObject );

// other methods
};

在 MyDialog.cpp 中:

bool MyDialog::isVisible( MyObject *myObject )
{
// This intended call to QWidget::isVisible() won't compile
return MyDialog::getInstance( myObject )->isVisible()
}

编译失败,出现以下错误:

src/MyDialog.cxx: In static member function ‘static bool MyDialog::isVisible(MyObject*)’:
src/MyDialog.cxx:67:57: error: no matching function for call to ‘MyDialog::isVisible()’
src/MyDialog.cxx:67:57: note: candidate is:
src/MyDialog.cxx:62:6: note: static bool MyDialog::isVisible(Equipment*)
src/MyDialog.cxx:62:6: note: candidate expects 1 argument, 0 provided

它似乎试图调用我的静态方法 MyDialog::isVisible( MyObject * ) 而不是继承的 QWidget::isVisible() 匹配签名。为什么?

最佳答案

当您声明与基类函数同名但签名不同的静态函数 isVisible 时,您并没有重载它,但实际上隐藏了继承的函数。编译器会看到在您的类中实现的函数,但看不到从 QWidget 继承的 isVisible 函数。

如果你想专门调用 QWidget 版本,要么更改你的函数的名称(这样它就不会再隐藏它),要么像这样限定调用:

MyDialog::getInstance( myObject )->QWidget::isVisible();

关于c++ - 为什么我不能调用 QWidget::isVisible() 的继承版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17577804/

27 4 0