Проблема в том, что компилятор не знает, как применить std::complex<float> operator+(const std::complex<float>&, const std::complex<float>&)
к вашему конкретному классу myvector
.Прямое исправление заключается в написании перегруженного оператора + для вашего класса или неявного конструктора преобразования:
class myvector : public std::complex<float> {
public:
myvector(const float x_ = 0, const float y_ = 0)
: std::complex<float>{ x_, y_ } // just call the base class constructor
{}
myvector(const std::complex<float> &ref) : std::complex<float>(ref) {}
};
Однако, похоже, вы пытаетесь расширить функциональность класса std::complex
с помощью наследования, котороекак правило, не очень хорошая идея, потому что его деструктор не является виртуальным.Лучшим подходом было бы сделать std::complex
членом вашего myvector
и предоставить собственный публичный API.