2017-11-14 8 views
0

すべてが、私は自分のコードに EDITをテンプレートを導入する前に働いていた stack.cpp:メンバー関数void Stack<TYPE>::push(Stack<TYPE>&, TYPE)': stack.cpp:35: error:ノード 'は型ではありませんテンプレート実装のセグメント化エラー。ここで が、私はそれを絞り込むことができたために問題がある、あなたのヒントに感謝:4:</p> <p>ファイルではmain.cppにから含ま

pop関数の後に同様の問題が発生する可能性はありますか?

ノードがタイプではないと主張するように思われるのは混乱しています。

EDIT#2: main.cppファイルのこのステートメントは、現在問題を引き起こしています。私はすべての定義をstack.cから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

[mcve] –

+0

とはどういう意味ですか? – mzz

+0

@mzzここをクリック - >> [mcve] –

答えて

0
  1. friend ostream& operator<<(ostream&, Stack&);
  2. 必要とされていないあなたはcppファイルにテンプレートメソッドを定義することはできません。テンプレートパラメータに依存するテンプレートの各要素は、ヘッダファイルで定義する必要があります。
+3

_ "cppファイルでテンプレートメソッドを定義することはできません" _は実際には真ではありません。インスタンス化される型が事前にわかっていて、 'cpp'ファイルで明示的にインスタンス化されているなら、あなたは* can *です。 –

+0

あなたはテンプレートがあらかじめ定義されたタイプのセットでのみ使用されるまれなケースについて言いますが、そうではありません。 –

+0

私は自分のstack.cファイルとstack.hファイルを融合する必要があるのでしょうか? – mzz

関連する問題

 関連する問題