gpt4 book ai didi

c++ - * 和 *& 的区别

转载 作者:行者123 更新时间:2023-11-28 08:12:48 25 4
gpt4 key购买 nike

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

最佳答案

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

QDialog* get_dialog(Caller*& caller);

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

get_dialog(Main_Dialog* const)

关于c++ - * 和 *& 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8558517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com