[완료]템플릿에서의 상속입니다.
글쓴이: rjaechang / 작성시간: 금, 2007/10/12 - 8:30오후
bag을 만들어서 stack에 상속하려고 합니다. 그런데 계속
error C2953: 'Bag' : template class has already been defined
란 에러가 뜹니다. bag이 이미 정의되어있다는게 무슨 의미인지 모르겠습니다.
bag.h 입니다.
#include<iostream>
using namespace std;
template <class Type>
class Bag
{
public:
Bag(int capacity = 10); //생성자
~Bag(); //파괴자
virtual void push(const Type&); //원소를 bag에 삽입
virtual Type* pop(Type&);
virtual bool IsFull();
virtual bool IsEmpty();
protected:
virtual void Empty();
virtual void ExtSize();
Type *array;
int capacity;
int top;
};bag.cpp 입니다.
#include "bag.h"
template <class Type>
Bag<Type>::Bag(int capa):capacity(capa)
{
array = new Type[capa];
top = -1;
}
template <class Type>
Bag<Type>::~Bag()
{
delete [] array;
delete array;
}
template <class Type>
void Bag<Type>::push(const Type& x)
{
if(IsFull())
ExtSize();
array[++top] = x;
}
template <class Type>
Type* Bag<Type>::pop(Type& x)
{
int deletePos, i;
if(IsEmpty()){
Empty();
return 0;
}
else{
deletePos = top;
x=array[deletePos];
for (i=deletePos; i<top; i++)
array[i] = array[i+1];
top--;
return &x;
}
}
template <class Type>
void Bag<Type>::ExtSize()
{
T* temp;
int i;
capacity = capacity * 2;
temp = new Type[capacity];
for(i=0; i<capacity/2; i++)
temp[i] = array[i];
delete [] array;
array = temp;
delete temp;
}
template <class Type>
bool Bag<Type>::IsFull()
{
if (capacity - 1== top)
return true;
else
return false;
}
template <class Type>
bool Bag<Type>::IsEmpty()
{
if (top == -1)
return true;
else
return false;
}
template <class Type>
void Bag<Type>::Empty()
{
cout << "The Bag is Empty" << endl;
}backstack.h입니다.
#include "bag.h"
#include "bag.cpp"
template <class T>
class Stack:public Bag<T>
{
public:
Stack(int capacity);
~Stack();
private:
void Empty();
};backstack.cpp입니다.
#include "backstack.h"
template <class T>
Stack<T>::Stack(int capacity):Bag(capacity)
{
}
template <class T>
Stack<T>::~Stack()
{
}
template <class T>
void Stack<T>::Empty()
{
cout << "Stack is empty" << endl;
}Forums:


include에 의해서 bag.h를 두번 포함시켰으니까요.
공부했던 책을 다시 한번 읽어보시기 바랍니다.
질문에 대한 답이 될
질문에 대한 답이 될 지 안 될 지는 모르겠으나
일단 템플릿 클래스는 다른 클래스처럼
헤더와 소스를 분리할 수 없다고 알고 있습니다.
표준은 export 키워드를 쓰면 된다고 하지만
그 키워드를 구현하는 컴파일러는 거의 없다고 알고 있습니다.
템플릿 클래스는 모두 헤더 파일에 정의해주세요.
예 저도 템플릿
예 저도 템플릿 클래스는 export를 써야 하지만 컴파일러에서 구현을 하고 있지 않기 때문에 저런식으로 파일 두개를 모두 include해줘야 한다고 알고있었습니다. 어쩔수 없이 한파일 내에 구현해야겠네요^^;;
(~`0`)~
댓글 달기