помощник оператора присваивания c ++ - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь написать вспомогательный .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 = 'должен быть нестатическим членом

Я просто заблудился ... как я могу правильно это сделать?

Редактировать: я забыл упомянуть, его основным использованием будет преобразование данных из библиотеки A в библиотеку B.

1 Ответ

3 голосов
/ 27 мая 2019

Как объясняется в сообщении об ошибке, оператор присваивания может быть определен только как член .Предполагая, что QVector3D взято из Qt и поэтому не может быть изменено вами, а с другой стороны, someDataObj относится к определенному вами типу, вы можете сделать оператор преобразования для этого типа.Если это не так, то вам нужно выполнить преобразование явно с помощью функции, не являющейся членом.

Редактировать:

Синтаксис 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
    };
    

Тем не менее, я думаю, что этот тип преобразования следует оставить явным , но приведенный выше код уже должен быть достаточно обескураживающим.Можем ли мы рассматривать это как улучшение, так как в какой-то момент вы должны перейти на ваш тип?Я так не думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...