gpt4 book ai didi

c++ - 子类重载基类赋值运算符导致歧义赋值错误

转载 作者:行者123 更新时间:2023-11-30 01:22:33 24 4
gpt4 key购买 nike

我有这个基类(删除了细节)

template<class T>
class GPtr
{
public:
typedef T BaseType;

GPtr& operator=(const BaseType& rhs)
{
m_p = rhs.get();
return *this;
}
private:
BaseType m_p;
};

然后一个子类专门化模板并添加另一个赋值选项:

class GDrawablePtr : public GPtr<XYZ>
{
public:
GDrawablePtr& operator=(const RootType& rhs)
{
GPtr::operator =(convert<BaseType::element_type>(rhs));
return *this;
}
/* -- only compiles if this is uncommented
GDrawablePtr& operator=(const BaseType& rhs)
{
GPtr::operator =(rhs);
return *this;
}
*/
};

注释掉该代码后,我在分配实例时收到有关歧义分配的编译错误。如果我取消注释,那么即使它似乎没有做任何新的事情,编译也会成功。

有没有办法避免重新定义原始的基本赋值运算符,这种行为的原因是什么?

最佳答案

它被称为隐藏:在派生类中声明一个函数会使基类中具有相同名称的任何函数不可访问。您也可以使用 using-declaration 使基类版本可用:

// In GDrawablePtr
using GPtr::operator=;

关于c++ - 子类重载基类赋值运算符导致歧义赋值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16171900/

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