chip_definition/Isrc/NLBChipDefinitionEditor.C:20: error: no matching function for call to `nlb::gui::chip_definition::ChipDefinitionEditor::connect(QAction*, const char*, nlb::gui::chip_definition::ChipDefinitionEditor* const, const char*)'
我从代码中得到这个错误:
qDebug() << dynamic_cast<QObject*>(this);
connect(m_engine->actionRegister().actionAt(nlb::gui::base::ACTION_ID_CONTEXT_REMOVE_CHIP), SIGNAL(triggered(bool)), this, SLOT(onRemoveSelectedChips()));
错误指出 this(ChipDefinitionEditor*)
不是 QObject*
但 dynamic_cast
在 connect
是评论。 ChipDefinitionEditor
当然是从 QObject
派生的。怎么会这样?
最佳答案
Qt 期望connect
的参数是QObject*
类型。给出这种形式的错误:
no matching function for call to `connect(SOMETYPE*, const char*,
SOMEOTHERTYPE*, const char*)'
编译器隐含地声明它没有信息表明 SOMETYPE
和 SOMEOTHERTYPE
是一个 QObject
给出了包含的内容那个翻译单位。通常,只需包含 SOMETYPE
/SOMEOTHERTYPE
的头文件即可为编译器提供确定 SOMETYPE
/SOMEOTHERTYPE< 所需的内容
继承自 QObject
。在其他情况下(例如您的情况),您需要确保 SOMETYPE
/SOMEOTHERTYPE
已动态转换为 QObject
。
还值得注意的是,当编译器对一种类型有足够的信息但对另一种类型没有足够的信息时,错误消息会略有变化。例如,如果您修复了 SOMETYPE
而不是 SOMEOTHERTYPE
的错误,则错误消息会略有变化:
no matching function for call to `connect(QObject*, const char*,
SOMEOTHERTYPE*, const char*)'
关于c++ - QObject::connect 无匹配函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17174391/