我对模板的概念很陌生。我错过了什么吗?
#ifndef STACK_H
#define STACK_H
template < class T>
class Stack{
private:
struct node {
T data;
node* next;
};
node * top;
//node* getNewNode(T num);
};
//template <class T>
//(node*)Stack<T> :: getNewNode(T num){
// node * temp = new node;
// temp->data = num;
// temp->next = NULL;
// return temp;
// }
#endif
当我取消注释函数getNewNode并向getNewNode函数推荐相应的语句时,编译器会给出错误 为什么我的函数getNewNode没有按预期工作。我哪里做错了?
Error 7 error C2470: 'Stack<T>::getNewNode' : looks like a function
definition, but there is no parameter list; skipping apparent
body c:\users\nitinjose\documents\visual studio
2010\projects\templatequeue\templatequeue\stack.h 26 1 TemplateQueue
Error 2 error C4430: missing type specifier - int assumed. Note: C++
does not support default-int c:\users\nitinjose\documents\visual
studio
2010\projects\templatequeue\templatequeue\stack.h 26 1 TemplateQueue
Error 5 error C2146: syntax error : missing ')' before identifier
'num' c:\users\nitinjose\documents\visual studio
2010\projects\templatequeue\templatequeue\stack.h 26 1 TemplateQueue
答案 0 :(得分:1)
返回值的规范是错误的。试试这个
template <class T>
typename Stack<T>::node* Stack<T> :: getNewNode(T num){
// ...
}
答案 1 :(得分:1)
在类主体外部定义成员函数会更改此点可访问的名称的规则。在您的情况下,编译器不知道node
是什么。您需要告诉他node*
实际上是在班级Stack<T>
中,例如typename Stack<T>::node
。此处需要typename
,因为节点是从属名称。