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 関数にコメンドすると、コンパイラはWhy is my function getNewNode not working as expected. のようなエラーを返します。どこで私は間違えましたか?

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>::nodetypenamenode は従属名であるため、ここでは が必要です。

于 2012-05-12T00:05:19.350 に答える