Начал осваивать шаблоны в с++, линковщик ругается следующим:
error LNK2019: unresolved external symbol "public: __thiscall Array_Stack<char>::~Array_Stack<char>(void)" (??1?$Array_Stack@D@@QAE@XZ) referenced in function _wmain
MS VS 2010.
Задним местом чую, что ошибка элементарная, но решить не могу. Гугль пишет
Question: You have included the templates in every source file? (you should answer YES).
Question: You are not using function prototypes for template funcitons? (You should answer YES).
Как подключить шаблоны в сорц? Что значит "не используйте прототипы функций для шаблонных функций"...
Array_Stack.h
#pragma once
template<class T> class Array_Stack //: public MyStack<T>
{
private:
T* arr;
int top;
int maxSize;
public:
Array_Stack(int size);
~Array_Stack(void);
T pop();
void push(T ch);
};
Array_Stack.cpp
#pragma once
#include "StdAfx.h"
#include "Array_Stack.h"
template<class T> Array_Stack<T>::Array_Stack(int size)
{
maxSize = size;
arr = new T[maxSize];
top = 0;
}
template<class T> T Array_Stack<T>::pop()
{
if(top == 0)
{
throw Overflow();
}
top--;
return arr[top];
}
template<class T> void Array_Stack<T>::push(T ch)
{
if(top == maxSize)
{
throw Overflow();
}
arr[top] = ch;
top++;
}
template<class T> Array_Stack<T>::~Array_Stack()
{
delete [] arr;
}
main
#pragma once
#include "stdafx.h"
#include <iostream>
#include "Array_Stack.h"
int _tmain(int argc, _TCHAR* argv[])
{
int size = 10;
Array_Stack<char> myStack (size);
int x;
std::cin >> x;
return 0;
}