*和*&之间的差异

时间:2011-12-19 07:56:02

标签: c++

当我以下列方式定义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吗?怎么了?

1 个答案:

答案 0 :(得分:1)

看起来您正在尝试传入const指针,但该方法需要非const指针。

QDialog* get_dialog(Caller*& caller);

此方法需要引用指针(任何地方都没有const)。如果你传入一个非const指针,它将隐式转换为引用到非 - const - 指针。但是,如果传入const - 指针,则隐式转换不起作用,因此编译器会查找具有以下签名的函数:

get_dialog(Main_Dialog* const)