C ++赋值运算符助手

时间:2019-05-27 09:36:51

标签: c++ operator-overloading

我正在尝试与一些操作员一起编写辅助.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

1 个答案:

答案 0 :(得分:3)

如错误消息所述,只能将赋值运算符定义为成员。假设QVector3D来自Qt,因此您无法对其进行修改,另一方面,someDataObj是您定义的类型,则可以制作一个{{3} }代替。如果不是这种情况,则必须通过非成员函数显式执行转换。

编辑:

语法library_a_data = library_b_data,但其中一种必须用您自己的包装:

  1. 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
    };
    
  2. 组成

    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
    };
    

但是,我认为这种转换应该保持明确,但是上面的代码应该已经足够令人沮丧了。我们是否可以认为这是一种改进,因为您必须先转换为您的类型?我不这么认为。