0

我对模板的概念很陌生。我错过了什么吗?

#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
4

2 回答 2

1

返回值的规范是错误的。尝试这个

template <class T>
typename Stack<T>::node* Stack<T> :: getNewNode(T num){
    // ...
}
于 2012-05-11T23:56:42.650 回答
1

在类主体之外定义成员函数会稍微改变此时可以访问哪些名称的规则。在您的情况下,编译器不知道是什么node。你需要告诉他,node*实际上是在课堂Stack<T>上,例如typename Stack<T>::node。这里typename是必需的,因为 node 是一个从属名称。

于 2012-05-12T00:05:19.350 回答