Что случилось со следующим кодом? Этот вопрос не помогает мне.
exts.h:
template <typename T> class MyClass
{
public:
MyClass();
MyClass(const MyClass& tocopy);
template <typename U> MyClass(const MyClass<U>& tocopy);
// ...
};
exts.cpp:
#include "exts.h"
template <typename T> MyClass<T>::MyClass() {}
template <typename T> MyClass<T>::MyClass(const MyClass& tocopy)
{// ... }
template <typename T> template <typename U> MyClass<T>::MyClass(const MyClass<U>& tocopy)
{// ... }
template class MyClass<int>; //instantiation of the class
template class MyClass<double>; //instantiation of the class
template MyClass<double>::MyClass(const MyClass<int>); //instantiation of specifized class member? ERROR here!!
main.cpp:
#include "exts.h"
//...
MyClass<double> a; //...
MyClass<int> b(a);
Ошибка, которую я получаю под VS2012++ в указанной строке:
ошибка C3190: "MyClass :: MyClass (const MyClass)" с предоставленными аргументами шаблона не является явным экземпляром любой функции-члена из "MyClass",
И под g++:
exts.cpp: 18: 10: error: template-id 'MyClass <> для' MyClass :: MyClass (MyClass) не соответствует шаблону объявления шаблона MyClass :: MyClass (const MyClass);
замещать
template MyClass<double>::MyClass(const MyClass<int>); //instantiation of specifized class member? ERROR here!!
с
template MyClass<double>::MyClass(const MyClass<int>&); //instantiation of specifized class member? ERROR here!!