невозможно получить доступ к функции базового класса с ++ - PullRequest
0 голосов
/ 22 сентября 2018

Почему этот код:

class myvector: public std::complex<float>{
            float x;
            float y;
            public:
            myvector(const float x_ = 0, const float y_ = 0) : std::complex::complex(x_), std::complex::complex(y_), x(x_), y(y_) {}
    };

int main(){
    myvector u, v;
    std::cout<< u + v;
}

Результатом этой ошибки?

error: conversion from ‘std::complex<float>’ to non-`scalar type ‘myvector’ requested`

Не должен ли я иметь доступ к перегруженному оператору +, так как я унаследовал std :: complex, которыйуже есть перегруженный + оператор?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Проблема в том, что компилятор не знает, как применить 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.

0 голосов
/ 22 сентября 2018

Вам не нужны члены x и y, поскольку эти значения хранятся в std::complex, от которого наследуется ваш класс.

#include <complex>
#include <iostream>

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

int main()
{
    myvector u, v;
    std::cout << u + v;
}

Не наследуйте от классову которого нет виртуального деструктора.

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