有关template的一个问题
///////////////////////////
// file: astack.h
#ifndef ASTACK_H
#define ASTACK_H
#include <iostream>
using namespace std;
const int MAXSTACKSIZE = 50;
template<class T>
class Stack {
public:
Stack();
private:
int top;
};
#endif
// end of astack.h
///////////////////////////
///////////////////////////
// file: astack.cpp
#include "astack.h"
// initialize stack top
template<class T>
Stack<T>::Stack() : top(-1) {}
// end of astack.cpp
///////////////////////////
///////////////////////////
// file: main.cpp
int main() {
Stack<int> s;
}
// end of main.cpp
///////////////////////////
各个文件都能通过编译,但是
用VC++ 6.0 build的时候报告error LNK2001;
用VC++.NET 2003 build的时候报告error LNK2005和error LNK2019
如果把template class的定义和声明放在一个文件里,例如定义和声明都放在astack.h中,就可以正常链接生成而不会出现错误。
我看Thinking in C++的p700上是说,可以把模板的定义放在一个独立的cpp文件中的,为什么我这样做会出错呢?如何解决这个问题?谢谢!