我正在尝试用一些操作符编写一个 helper .h 文件。
主要是这样的
QVector3D &operator=(const someDataObj&data){
QVector3D out(data[0],data[10],data[12]);
return out;
}
但是当我尝试它时,我得到:错误 C2801:'operator =' must be a non-static member
如果我尝试:
Vector3D operator=(QVector3D &left, const someDataObj &other) {}
我得到:错误 C2801:'operator =' 必须是非静态成员
我只是输了...我怎么能正确地做到这一点?
编辑:我忘了提到,它的主要用途是将数据从 libraryA 转换为 libraryB。
正如错误消息所解释的,赋值运算符只能定义为成员。假设QVector3D
来自Qt,因此您不能修改,另一方面,someDataObj
是您定义的类型,您可以为该类型创建转换运算符。如果不是这种情况,那么您必须通过非成员函数显式执行转换。
编辑:
语法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
};
但是,我认为这种转换应该是显式的,但是上面的代码应该已经足够令人沮丧了。我们是否可以认为这是一种改进,因为在某一时刻您必须转换为您的类型?我不这么认为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句