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

时间:2015-04-10 13:34:07

标签: c++ class operator-overloading non-static

我试图实现以下运算符:

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;二元运算符应该由具有一个参数的非静态成员函数实现,或者由具有两个参数的非成员函数实现",这就是我正在做的,我认为。我该如何解决这个问题?

1 个答案:

答案 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;