Не существует подходящего конструктора для преобразования из "int" в "calc <int> - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть следующий код, к которому я хотел бы применить перегрузку операторов:

template < class T>
class calc
{
public:

    T multiply(T x, T y);
    T add (T x, T y);
};

template < class T>
T calc<T>::multiply(T k1, T k2)
{
    return k1 * k2;
}

template < class T>
T calc<T>::add(T k1, T k2)
{
    return k1 + k2;
}

int main()
{
    calc<int> c;
    std::cout << c.multiply(1, 5);
}

Я попытался реализовать перегрузку операторов, но у меня ошибка: E0415 не существует подходящего конструктора для преобразования из "int "to" calc ".Строка: calc a (1);

#include <iostream>
using namespace std;

template < class T>
class calc
{
public:
    T x;
    T y;
};

template < class T>
calc<T> operator*(calc<T> const&  k1, calc<T> const&  k2)
{
    calc<T> ret;
    ret.x = k1.x * k2.x;
    return ret;
}

int main()
{
    calc<int> a(1);
    calc<int> b(5);
    calc<int> result;

    return 0;
}

1 Ответ

0 голосов
/ 28 ноября 2018

При использовании классов должно быть нечто, называемое конструктором, который будет инициализировать класс.Таким образом, переменные этого класса устанавливаются и могут использоваться в функциях-членах.Конструктор не имеет возвращаемого типа (даже не void) и всегда именуется по имени класса.Так что в вашем случае код будет выглядеть примерно так:

calc<T> (int value)
{
    x=value;
}

или

calc<T> (int value)
{
    y=value;
}

В вашем первом примере кода программа вызывает конструктор по умолчанию, который создается для вас автоматическикомпилятором.Это выглядело бы примерно так:

calc<T> ()
{
    //since there is nothing to assign. Do nothing.
}

Однако если бы вы вызывали конструктор по умолчанию во втором примере кода, значениям x и y было бы присвоено значение по умолчанию T для этого компилятора.

Теперь, когда у вас есть конструктор, элемент в этом объекте сохраняется.Таким образом, ax или ay будут равны значению, которое было отправлено в конструктор.(В вашем случае 1).

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