[완료]템플릿에서의 상속입니다.
글쓴이: 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`)~
댓글 달기