2011-06-25 39 views
1

私はEclipseとMinGWを使用しています。私はundefined reference toエラーがあります。これは、hファイルに書き込むすべてのエラーです。つまり、mainにあるcpp-fileにインクルードします。私は、空のプロジェクトを作成し、再び同じこと(Eclipse定義されていない参照

main.cppに

#include <iostream> 
#include "Stack.h" 

using namespace std; 

int main(){ 
    Stack<int> stack(10); 
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! 
    return 0; 
} 

stack.h

#ifndef STACK_H_ 
#define STACK_H_ 

template <class T> 
class Stack{ 
private: 
    struct StackEl; 
    StackEl *top; 
public: 
    Stack(); 
    Stack(T el); 
    ~Stack(); 
    void Push(const T& el); 
    T Pop(); 
}; 

#endif /* STACK_H_ */ 

とstack.cppは私が含まれている場合stack.h からすべてをinplements

私は以下のエラーが発生しました

D:/Workspacee/Stack2/Debug/../src/Stack2.cpp:16: undefined reference to `Stack<int>::Stack(int)' 
D:/Workspacee/Stack2/Debug/../src/Stack2.cpp:18: undefined reference to `Stack<int>::~Stack()' 
D:/Workspacee/Stack2/Debug/../src/Stack2.cpp:18: undefined reference to `Stack<int>::~Stack()' 

答えて

0

私の悪い、それはテンプレートだから!テンプレートを使用するときは、関数の実現を含むすべてのコードがヘッダーファイルになければなりません。また、テンプレート関数を使用するすべてのタイプのプロトタイプを記述する必要があります。テンプレートを使って作業することは、通常の関数と同じではないことを忘れてしまいました。(

1

これはリンカエラーです。私はEclipseエキスパートではありませんが、リンクコマンドにStack.oを追加する必要があります。
Stack.hの代わりにStack.cppを含めると、コンパイル前にcpp-fileの実装がプリプロセッサによってmain.cppに組み込まれるため、リンクステージには外部関数への参照が未解決になります。

+0

テンプレートを使用すると、テンプレートを使用すると、関数の実現を含むすべてのコードがheader-fileになければなりません。テンプレート関数を使用するすべてのタイプのプロトタイプを書く必要があります。テンプレートを使って作業することは、通常の関数と同じではないことを忘れてしまいました。 – Alecs

関連する問題