运算符"="必须是非静态成员函数错误
Operator '=' must be a nonstatic member function error
我正在尝试实现以下运算符:
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;
相关文章:
- 如何在C++中使用非静态成员函数作为回调函数
- 静态成员函数使用相同的名称时出现模板类型名称错误
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 为什么传递非静态成员函数会导致编译错误?
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 非静态成员函数的 decltype 格式不正确吗?
- std::异步与非静态成员函数
- C++无效使用非静态成员函数?
- 未使用的C++未优化的静态成员函数/变量
- C++:如何返回指向非静态成员函数的指针?
- 使用静态成员函数而不是普通函数是否有任何开销?
- 在 stream_descriptor::async_wait 中无效使用非静态成员函数
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- 无法在clang Linux中分配非静态成员函数,但我可以在Visual Studio Windows中分配
- 在类定义中推导内联静态成员函数的返回类型
- `enable_if()`以禁用模板化类的静态成员函数声明
- 错误:无效使用非静态成员函数"int test::hotplug_callback(libusb_contex
- 常量静态成员函数
- 使用 vector.sort() 的非静态成员函数无效使用
- 从静态成员函数访问私有非静态类变量 - C++