运算符=函数和加法函数似乎不能共存
Operator = function and an add function cant seem to coexist
我的两个函数有问题。我有operator =
方法和add
方法。它们自己工作得很好,就像在一次编译中我只能使用其中一个。例如,为了使operator =
方法工作,我需要注释掉add
函数,反之亦然。错误我得到10 no match for 'operator=' in 'c = (&a)->HUGE_INT::add(((HUGE_INT&)(&b)))'
HUGE_INT HUGE_INT::operator=(HUGE_INT &orig)
{
//code
return *this;
}
HUGE_INT HUGE_INT::add(HUGE_INT &a)
{
//code
return object;
}
//client
HUGE_INT a(9999999),b(1111),c,d;
c = a.add(b);
d = a;
您遇到的问题是,您从add
按值返回,并通过非常数引用将参数带到operator=
。
从add
返回的临时对象是一个右值,因此它不能绑定到非常量引用。
除非您正在做一些非常奇怪的事情,否则您可能希望将operator=
更改为通过引用const:来接受其参数
HUGE_INT& HUGE_INT::operator=(HUGE_INT const& orig)
{
//code
return *this;
}
(我还将其更改为通过引用返回,因为这是operator=
的标准签名。)
我为您修复了代码,当然,它现在什么都不做,就像您的示例一样,但它可以编译。原因是您需要将"="运算符的参数指定为常量,并且正如其他海报所述,您还应该返回对对象的引用。
class HUGE_INT
{
public:
HUGE_INT(){this->var = 0;}
HUGE_INT(int v){this->var = v;};
HUGE_INT& operator=(const HUGE_INT &orig)
{
return *this;
}
HUGE_INT add(HUGE_INT &a)
{
HUGE_INT object;
return object;
}
private:
int var;
};
int main()
{
//client
HUGE_INT a(9999999),b(1111),c,d;
c = a.add(b);
d = a;
}
为了更好地理解,请查看关于操作员过载的教程
您的operator=
应该返回一个引用以及一个常量引用;即它应该具有签名HUGE_INT& HUGE_INT::operator=(const HUGE_INT& orig)
。
顺便说一句,对类名使用全大写是非常糟糕的C++风格。所有大写字母通常都保留给宏。
相关文章:
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么虚函数不能是静态的和全局的?
- 为什么继承的受保护构造函数不能公开?
- C++为什么类成员函数不能重新声明,但普通函数可以
- 为什么在C++中使用关系运算符创建的模板函数不能对字符串正常工作?
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 为什么模板函数不能作为模板模板参数传递?
- 为什么 free 函数不能在 C 数组上运行,而 std::begin 在某些情况下可以在 C++14 中运行?
- 构造函数不能用于启发性化
- C 错误 - 函数不能超载
- 有没有办法使成员函数不能从构造函数调用
- 为什么模板函数不能是模板类的友元模板函数
- "Framework::Graphics::Material"的默认构造函数不能被引用 - 它是一个已删除的函数
- lower_bound()函数不能在调试模式下编译
- 为什么函数不能正确强制转换指针(从基类到派生类)
- 显式默认函数不能声明为 constexpr,因为隐式声明不是 constexpr
- 琐碎的默认构造函数不能是 constexpr?
- 函数不能嵌套,那么如何在C++中执行此操作
- 错误:成员函数不能在其类之外声明
- 错误-仅返回类型不同的函数不能重载.c++