我正在尝试与一些操作员一起编写辅助.h文件。
主要是这样的
QVector3D &operator=(const someDataObj&data){
QVector3D out(data[0],data[10],data[12]);
return out;
}
但是无论何时我尝试,我都会得到: 错误C2801:“ operator =”必须是非静态成员
如果我尝试:
Vector3D operator=(QVector3D &left, const someDataObj &other) {}
我得到:错误C2801:'operator ='必须是非静态成员
我迷路了...我该怎么做呢?
TIA
编辑,忘记了,它的主要用途是将数据从库A转换为库B
答案 0 :(得分:3)
如错误消息所述,只能将赋值运算符定义为成员。假设QVector3D
来自Qt,因此您无法对其进行修改,另一方面,someDataObj
是您定义的类型,则可以制作一个{{3} }代替。如果不是这种情况,则必须通过非成员函数显式执行转换。
编辑:
语法library_a_data = library_b_data
,但其中一种必须用您自己的包装:
private
继承
class MyVector3D : private QVector3D // do not allow implicit conversions
// to the base class for safety, as the destructor is not virtual
{
public:
using QVector3D::member_1;
using QVector3D::member_n; // very tedious work of bringing the names back
// hurray, you can define your assignment or conversion operator
};
组成
class MyVector3D
{
QVector3D m_data;
public:
auto member_1() { return m_data.member_1(); }
auto member_n() { return m_data.member_n(); } // even more tedious
// hurray, you can define your assignment or conversion operator
};
但是,我认为这种转换应该保持明确,但是上面的代码应该已经足够令人沮丧了。我们是否可以认为这是一种改进,因为您必须先转换为您的类型?我不这么认为。