Вот простой пример использования шаблонов классов в C++. Этот код работает.C++ Неразрешенный внешний символ с шаблонами классов
#include <iostream>
using namespace std;
template <class T>
class Test {
public:
Test();
void print();
private:
int i;
};
template <class T>
Test<T>::Test() {
i=1;
cout<<"New instance"<<endl;
}
template <class T>
void Test<T>::print() {
cout<<"Test"<<endl;
}
int main() {
Test<int> i;
i.print();
return 0;
}
Так что, когда я разделить этот код в 3-х файлов: main.cpp, test.h, test.cpp:
//Test.h
#include <iostream>
using namespace std;
template <class T>
class Test {
public:
Test();
void print();
private:
int i;
};
//Test.cpp
#include "Test.h"
template <class T>
Test<T>::Test() {
i=1;
cout<<"New instance"<<endl;
}
template <class T>
void Test<T>::print() {
cout<<"Test"<<endl;
}
//main.cpp
#include "Test.h"
using namespace std;
int main() {
Test<int> i;
i.print();
return 0;
}
я получаю ошибки:
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall Test<int>::print(void)" ([email protected][email protected]@@QAEXXZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Test<int>::Test<int>(void)" ([email protected]@@[email protected]) referenced in function _mai
1>C:\Programming\C++\stuff\templass\Debug\templass.exe : fatal error LNK1120: 2 unresolved externals
я использую Microsoft Visual C++ 2010 Express. Поэтому я много искал о неразрешенном внешнем символе, но больше не нашел для этого случая. Так в чем же моя ошибка?
«Итак, я много искал неразрешенный внешний символ, но больше не нашел для этого случая». В самом деле? Простой поиск Google для «неразрешенного внешнего символа шаблона» дает точное решение. –