Это потому, что нет оператора int
, когда ваш шаблонный класс создается с шаблонным типом как char
.
У вас здесь нет оператора присваивания, только конструктор и оператор типа. Это означает, что ваш компилятор, вероятно, поместил бы в него компилятор по умолчанию, вероятно, в соответствии с:
Number<T>& operator=( Number<T>& rhs );
Вы должны реализовать свой собственный оператор присваивания, это должно решить вашу проблему. Общее решение может быть следующим, но основано на действительном назначении между типами.
template <typename T, typename V>
class Number
{
private:
T num;
public:
Number() {}
Number( T n ) : num(n) {}
operator T() const { return num; }
operator=( V& rhs ){ num = rhs; // etc }
};
Вам также нужно сделать конструктор вашего класса explicit
, чтобы избежать неявного преобразования (если это не то, что вы хотите).