2012-05-03 14 views
2

可能性の重複:
Why can templates only be implemented in the header file?
“Undefined symbols” linker error with simple template classエラーLNK2019 FATAL ERROR C

queue.h

#include<iostream> 
using namespace std; 

template <class t> 
class queue { 

    public: 
     queue(int=10); 
     void push(t&); 
     void pop(); 
     bool empty();  

    private: 
     int maxqueue; 
     int emptyqueue; 
     int top; 
     t* item; 
}; 

queue.cpp

#include<iostream> 

#include"queue.h" 
using namespace std; 

template <class t> 
queue<t>::queue(int a){ 
    maxqueue=a>0?a:10; 
    emptyqueue=-1; 
    item=new t[a]; 
    top=0; 
} 

template <class t> 
void queue<t>::push(t &deger){ 

    if(empty()){ 
     item[top]=deger; 
     top++; 
    } 
    else 
     cout<<"queue is full"; 
} 
template<class t> 
void queue<t>::pop(){ 
    for(int i=0;i<maxqueue-1;i++){ 
     item[i]=item[i+1]; 
    } 
    top--; 
    if(top=emptyqueue) 
     cout<<"queue is empty"; 
} 
template<class t> 
bool queue<t>::empty(){ 
    if((top+1)==maxqueue) 
     return false 
    else 
     return true 
} 

main.cppに

#include<iostream> 
#include<conio.h> 

#include"queue.h" 
using namespace std; 

void main(){ 
    queue<int>intqueue(5); 
    int x=4; 
    intqueue.push(x); 

    getch(); 
} 

私は、テンプレートを使用してキューを作成しました。コンパイラはこのエラーを出しました。私はこの問題を解決できませんでした。

1> MAIN.OBJ:エラーLNK2019:未解決の外部シンボル "パブリック:__thiscallキューを無効::プッシュ(int型)"(?押し込む@ $キュー@ H @@ QAEXH @ Z)関数_mainで参照 1> main.obj:エラーLNK2019:関数_mainで参照される未解決の外部シンボル「public:__thiscall queue :: queue(int)」(?? 0?$ queue @ H @@ QAE @ H @ Z) 1> c :\ユーザー\ PCの\ドキュメントプロジェクト\ Visual Studioの2010 \ lab10 \デバッグ\のlab10.exe \:致命的なエラーLNK1120:2つの未解決の外部

EDIT:ソリューションはhereに与えられています。

+0

にqueue.cppの内容を移動する必要がありますか? – robert

+0

http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-fileが改善された可能性があります – Flexo

答えて

0

テンプレートクラスは、テンプレートから目的のクラスを生成するために実装のコピーが必要なため、.cppファイルと.hファイルに分離できません。

あなたはどのようにあなたがこれをコンパイルしているqueue.cpp

関連する問題