출처 : http://mycpp.blog.me/120147433633
template class를 인라인으로 만들관 상관 없지만
함수 밖에 뺀다면 template <typename T>void Stack<T>::함수이름() 형식을 맞춰 줘야 한다.
근데 여기서 주의할 점! template class는 헤더파일과 cpp파일을 분리해서 작성하는 것을 지원하지 않는다.
만약 다음과 같이 한다면 ...
=== stack.h 파일 ====
template <typename T>
class Stack
{
protected:
int top;
T m_data[10];
public:
Stack();
void push(T data);
void print();
};
=== stack.cpp 파일 ====
#include "stack.h"
template <typename T>Stack<T>::Stack()
{ top = 0;
}
template <typename T>void Stack<T>::push(T data)
{
m_data[top++] = data;
}
template <typename T>void Stack<T>::print()
{
for(int i=0;i<top;i++)
cout<<m_data[i]<<" ";
}
=== main.cpp 파일 ====
#include <iostream>
#include <string>
using namespace std;
#include "stack.h" //stack.cpp로 바꾸지 않으면 에러
void main()
{
Stack <int>s;
s.push(10);
s.push(20);
s.push(30);
s.print();
cout<<endl;
Stack <string>s2;
s2.push("abc");
s2.push("def");
s2.push("ghi");
s2.print();
cout<<endl;
}
문법상 에러는 없으나 linking 에러 남
오류 1 error LNK2019: "public: void __thiscall Stack<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::print(void)" (?print@?$Stack@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@@QAEXXZ) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다. main.obj
[출처] template class 만들때 주의할 점|작성자 수환이
'Programming > C/C++' 카테고리의 다른 글
[C++] string (0) | 2013.04.05 |
---|---|
[C++] Friend 키워드 (0) | 2012.06.10 |
CallBack 함수 (1) | 2012.06.10 |