可能性の重複:
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 °er){
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に与えられています。
にqueue.cppの内容を移動する必要がありますか? – robert
http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-fileが改善された可能性があります – Flexo