visual studio и перегрузка операторов

340
04 ноября 2017, 14:47
#include <iostream>
using namespace std;
class pop {
    int x;
 public:
    int getX() {
        return x;
    }
    pop() : x{ 0 } {}
    pop operator + (pop& p) {
        return pop(this->x + p.x);
        // здесь ошибка E0289: отсутствуют экземпляры конструктора pop::pop,
        // соответствуюшие списку аргументов; и всегда у меня ошибки с
        // перегрузкой в vs
    }
};
Answer 1
  • Вам нужен конструктор для класса pop, который принимает один параметр типа int. Вы в вашем return пытаетесь использовать именно его, но создать его вы забыли.

    Этот конструктор может быть отдельным конструктором, но можно, если вам понравится, воспользовавшись аргументами по умолчанию, написать один общий конструктор: и для конструкции из int, и для конструкции по умолчанию

    pop(int x = 0) : x{ x } {}
    

    Также, если вы не объявите такой конструктор explicit, то он будет конструктором преобразования и в реализации вашего оператора вы сможете, при желании, просто написать

    return x + p.x;
    

    Но это дело вкуса.

  • Бинарный оператор сложения лучше реализовывать самостоятельной (возможно дружественной) функцией, а не методом класса, как у вас. Однако даже при реализации методом класса не стоит забывать о константной корректности

    pop operator + (const pop& p) const 
    

    и, конечно

    int getX() const
    
  • Если вы предоставите конструктор конверсии из типа int, вы сразу же сможете также выполнять сложения вида

    pop a, b;
    a = b + 5; 
    // Автоматически рассматривается компилятором как `b + pop(5)`
    

    Однако из-за того, что оператор сложения у вас реализован методом класса, вы не сможете выполнять сложения вида

    a = 5 + b;
    

    Реализация оператора сложения самостоятельной функцией была бы свободна от этого недостатка.

READ ALSO
Freeglut x64 и его подключение

Freeglut x64 и его подключение

Мне нужно использовать эту библиотекуК моему проекту уже подключен OpenGL и все работает

237
Zoom карты скроллом

Zoom карты скроллом

Доброго времени суток, делаю интерактивную карту, подскажите пожалуйста как увеличивать ее при скроле, нарезаю svg

221
Проблема с загрузкой картинки в свой виджет WordPress

Проблема с загрузкой картинки в свой виджет WordPress

Я делаю свой плагин с виджетом, в котором должна загружаться картинкаВот часть кода для кнопки загрузки в самом виджете:

272
Как выключить фоновый scrolling при открытии модального окна?

Как выключить фоновый scrolling при открытии модального окна?

Как выключить фоновый scrolling при открытии модального окна на css или js?

362