Динамическое распределение в конструкторе класса шаблона

Я работаю над классом стека и у меня есть два конструктора. Один из интересов это этот.

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 и эта проблема никуда меня не приведет.
Любая подсказка будет оценена.

1

Решение

Это не ошибка времени выполнения, это ошибка компоновщика. Возможно, проблема в том, что реализации конструктора и деструктора находятся в исходном файле. С шаблонными классами вы должны поместить реализации всех методов в заголовок (или в исходный файл, который их использует, но это эквивалентно размещению их в заголовке).

Так что в основном сделайте это:

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
};
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]