【发布时间】:2015-04-10 13:34:06
【问题描述】:
我正在尝试实现以下运算符:
void operator=(const mpz_t &a, const myDatatype &b);
我需要此运算符将变量从 myDatatype 转换为 GMP 中的 mpz_t(mpz_t x = y,其中 y 的数据类型为 myDatatype)。在头文件中,我在类之外声明了这个函数。但是,我里面还有一些其他的 '=' 运算符声明,因为我想将其他数据类型的变量转换为 myDatatype。
class myDatatype {
public:
//variable, constructors and destructor declaration
...
void operator=(const mpz_t &a);
void operator=(const myDatatype &a);
//some methods
};
void operator=(const mpz_t &a, const myDatatype &b);
我得到的错误是:
error: ‘void operator=(const __mpz_struct (&)[1], const myDatatype&)’ must be a nonstatic member function
void operator=(const mpz_t &a, const myDatatype &b);
我读到“二元运算符应由具有一个参数的非静态成员函数或具有两个参数的非成员函数实现”,我认为这就是我正在做的事情。我该如何解决这个问题?
【问题讨论】:
-
A binary operator shall be implemented either by a non-static member function with one parameter or by a non-member function with two parameters这不适用于operator=。正如编译器正确指出的那样,operator=必须是非静态成员函数。 “正常”二元运算符通常是对称的 - 您通常希望myObj + 42和42 + myObj都可以工作。但分配不是 -myObj = 42;有意义,但42 = myObj没有那么多。 -
从给定的用例看来,您确实想实现一个采用
const myDatatype&的mpz_t构造函数。 -
@IgorTandetnik 好的,谢谢。然后,我想我必须将它作为一个函数来实现。
-
@Henrik 是的,这就是我想要做的,但我不能为此更改 mpz_t 类,所以我尝试在我的类中作为运算符实现它。
标签: c++ class operator-overloading non-static