Possible Duplicate:
Why can templates only be implemented in the header file?
I’ve struggled with this for a while, and I’ve taken a look to several questions here, but being new to C++ I haven’t been able to understand where I am wrong.
Here is the code, I took it from this page and tried to make it work, but so far I haven’t been lucky:
stack.h
#ifndef STACK_H
#define STACK_H
template <class T>
class Stack {
public:
Stack(int n);
~Stack() { delete[] s; };
private:
T* s;
int _top;
int _size;
};
#endif // STACK_H
stack.cpp
#include "stack.h"
template <class T>
Stack<T>::Stack(int n) {
_size = n;
_top = -1;
s = new T[_size];
}
main.cpp
#include <iostream>
#include "stack.h"
using namespace std;
int main() {
Stack<int> s(10); // undefined reference to `Stack<int>::Stack(int)'
return 0;
}
When I compile (gcc 4.5.2) I get one error: undefined reference to Stack<int>::Stack(int). I’ve tried several things but without any real knowledge to support what I do. I will be really thankful if somebody can explain me what’s going on.
You can only have a template class definition in a cpp file if it’s a specialized definition – i.e. you know what
Tis.Other than that, and your case belongs here, all definitions of your template class have to go in the header file. The compiler has to know about these each time a new instance is declared or defined because the type, and thus the behavior, changes. Definitions in a cpp file would mean a different translation unit, so the compiler couldn’t possibly know about the behavior for every single
Tyou try to apply to your template.