当我以下列方式定义fnc时:
QDialog* get_dialog(Caller* caller);
然后用我的班级来调用它
class Main_Dialog : public Base_Dialog<Ui::Main_Dialog>{};
的工作原理。
//def of Base_Dialog
template< class Ui_Dialog >
class Base_Dialog : public QDialog, protected Ui_Dialog{};
但如果我将此fnc定义为:
QDialog* get_dialog(Caller*& caller); //note ref
然后代码无法编译,给出错误:
error: no matching function for call to 'Main_Dialog::get_dialog(Main_Dialog* const)'
候选人是:
template<class Dialog, class Caller> QDialog* Main_Dialog::get_dialog(Caller*&)
这不是我试图打电话的fnc吗?怎么了?
答案 0 :(得分:1)
看起来您正在尝试传入const
指针,但该方法需要非const
指针。
QDialog* get_dialog(Caller*& caller);
此方法需要引用指针(任何地方都没有const
)。如果你传入一个非const
指针,它将隐式转换为引用到非 - const
- 指针。但是,如果传入const
- 指针,则隐式转换不起作用,因此编译器会查找具有以下签名的函数:
get_dialog(Main_Dialog* const)