Я работаю над классом стека и у меня есть два конструктора. Один из интересов это этот.
template <typename T>
stack<T>::stack( const int n)
{
capacity = n ;
size = 0 ;
arr = new T [capacity] ;
}
Я называю это внутри главной, вот так.
stack<int> s1(3) ;
Программа компилируется нормально, но я получаю эту ошибку во время выполнения.
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall
stack<int>::~stack<int>(void)" (??1?$stack@H@@QAE@XZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall
stack<int>::stack<int>(int)" (??0?$stack@H@@QAE@H@Z) referenced in function _main
1>D:\\Microsoft Visual Studio 10.0\Visual Studio 2010\Projects\Expression
Evaluation\Debug\Expression Evaluation.exe : fatal error LNK1120: 2 unresolved externals
Я работаю над Microsoft visual studio 2010
и эта проблема никуда меня не приведет.
Любая подсказка будет оценена.
Это не ошибка времени выполнения, это ошибка компоновщика. Возможно, проблема в том, что реализации конструктора и деструктора находятся в исходном файле. С шаблонными классами вы должны поместить реализации всех методов в заголовок (или в исходный файл, который их использует, но это эквивалентно размещению их в заголовке).
Так что в основном сделайте это:
template<class T>
class stack
{
public:
stack( const int n)
{
capacity = n ;
size = 0 ;
arr = new T [capacity] ;
}
// and the same for all other method implementations
};
Других решений пока нет …