У меня есть следующий код:
#include <iostream>
template <class T>
class A;
int main()
{
A<int> obj;
}
template <class T>
class A
{
public:
A();
};
template <class T>
A<T> ::A()
{}
Мой компилятор (MS Visual Studio Update 4 Pro
) дает мне следующую ошибку:
error C2079: 'obj' uses undefined class 'A<int>'
MinGW
также дает мне ошибку того же значения.
В чем причина этого? Объявление класса A <T>
находится перед main
функцией, поэтому должно быть известно.
Это означает, что именно он говорит: шаблон не был определен в тот момент, когда вы пытаетесь его использовать. Определение, а не только объявление должно быть доступно для создания шаблона.
-1
? Я думаю, что это правильный ответ - поэтому пост является ответом.