Проблема в том, что MyClass<int>
и MyClass<double>
- это разные типы, и у вас есть только конструктор копирования, который принимает объекты одного типа.
Чтобы заставить ваш код работать, мне пришлось изменитьдве вещи:
template<typename u>
MyClass(const MyClass<u>& obj){
x=(t) obj.x;
z=(t)obj.z;
}
Теперь конструктор сам шаблонизируется (независимо от класса).Это позволяет вам создать MyClass<A>
из другого типа MyClass<B>
.
Но простое выполнение этого приводит к другой ошибке:
prog.cpp:14:19: error: ‘int MyClass<int>::x’ is private within this context
x=(t) obj.x;
Поскольку мы создаем из объектанесвязанный тип, у нас нет доступа к закрытым членам.
Обходной путь: Добавьте объявление friend
в класс:
template<typename> friend class MyClass;