在将模板引入代码之前,一切正常 编辑: 这是我能够缩小范围的问题,感谢您的提示:
main.cpp中包含的文件:4:
stack.cpp:在成员函数void Stack<TYPE>::push(Stack<TYPE>&, TYPE)':
stack.cpp:35: error:
中,node'不是类型
我想知道类似的问题是否会出现在pop函数的后期,但似乎没有。
我很困惑为什么它似乎坚持认为节点不是一个类型。
编辑#2:
main.cpp文件中的这个语句现在引起了麻烦。我已将stack.cpp中的所有定义移至stack.h。在此Stack<int> list;
后,我的编译说Segmentation fault (core dumped)
。
stack.h:
#include <iostream>
using namespace std;
template <typename TYPE>
struct node {
TYPE data;
node<Type> *next;
node(){
data = NULL;
next = NULL;
}
~node(){
if (data!=0)
delete next;
}
explicit node(int i){
data = i;
}
};
template <typename TYPE>
class Stack {
private:
node<TYPE> *top;
void init();
public:
Stack(); // default constructor
virtual ~Stack(); // destructor
bool empty();
void push(Stack&,TYPE);
TYPE pop(Stack&);
int peek();
void clear();
ostream& printf(ostream&, node<TYPE> *);
ostream& print(ostream&);
ostream& sequentialPrint(Stack&,ostream&);
ostream& reversePrint(Stack&,ostream&);
friend ostream& operator<<(ostream&, Stack&);
};
stack.cpp:
template <typename TYPE>
void Stack<TYPE>::push(Stack<TYPE> &s, TYPE i) {
node<TYPE> * n = new node(i);
n->next = top;
top = n;
}
template <typename TYPE>
TYPE Stack<TYPE>::pop(Stack<TYPE> &s){
if (empty()) {
cerr<<"Stack is empty \n";
}
TYPE temp = s.top->data;
top = top->next;
return temp;
}
答案 0 :(得分:0)
friend ostream& operator<<(ostream&, Stack&);
不需要cpp
文件中定义模板方法。必须在头文件中定义作为模板参数的模板的每个元素。