我试图实现以下运算符:
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);
我读到了#34;二元运算符应该由具有一个参数的非静态成员函数实现,或者由具有两个参数的非成员函数实现",这就是我正在做的,我认为。我该如何解决这个问题?
答案 0 :(得分:2)
void operator=(const mpz_t &a, const myDatatype &b);
这是无效的。 operator=
必须是编译器所说的非静态成员函数。
如果mpz_t
是外部类型(您无法修改),最佳选择是定义转换运算符:
class myDatatype
{
public:
operator mpz_t() const
{
//return mpz_t object constructed from *this
}
};
然后,您可以使用以下语法:
myDatatype my_object = ...;
mpz_t mpz_t_object = my_object;