Перегрузка оператора в шаблонах - PullRequest
0 голосов
/ 08 января 2019

хочу создать перегрузку оператора в myclass, с шаблоном класса

template <class T, class C>
T add (T a, C b...)
{
    return (a+b);
}

class ComplexNo
{
public:

    /*constuctors*/
    // accesor functions

    double RRAT() { return mRational; }
    double IIMAG() { return mImmag; }

перегрузка по ошибке

ComplexNo operator+(const ComplexNo other)
const
{
    return ComplexNo(mRational + other.mRational, mImmag + other.mImmag);
}

У меня проблема с этим:

    template <class T>
    ComplexNo operator+( T other)
    {
        return ComplexNo(mRational + (double)other, mImmag);
    }


    friend std::ostream& operator<<(std::ostream& stream, const ComplexNo& other);

    private:
    double mRational = 0, mImmag = 0;
};



std::ostream& operator << (std::ostream& stream,  ComplexNo& other)
{
    stream << " Rational part: " << other.RRAT()
           << " Irrat part" << other.IIMAG() << std::endl;
    return stream;
}

int main()
{
    ComplexNo c(10,20);
    ComplexNo b(30,40);
    ComplexNo q;
    ComplexNo d = add(c, b, q, 99);
    std::cout << d;
}

Ошибка компилятора в том, что он не может преобразовать ComplexNo в T и наоборот. не должно быть конверсии

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