类体外的成员函数定义会导致错误

时间:2012-05-11 23:52:30

标签: c++ templates stack singly-linked-list

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

#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

2 个答案:

答案 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,因为节点是从属名称。

相关问题