运算符"="必须是非静态成员函数错误

Operator '=' must be a nonstatic member function error

本文关键字:静态成员 函数 错误 是非 运算符      更新时间:2023-10-16

我正在尝试实现以下运算符:

void operator=(const mpz_t &a, const myDatatype &b);

我需要这个运算符将一个变量从myDatatype转换为GMP中的mpz_t(mpz_tx=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);

我读到"二进制运算符应该由具有一个参数的非静态成员函数或由具有两个参数的无成员函数实现",我认为这就是我正在做的。我该如何解决这个问题?

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;