Fwd: I use g++(gcc) 3.4.2 in win32 platform, and I can't compile my little program....

阿保 auxo86@gmail.com
Sun May 14 14:23:00 GMT 2006


I am a student and I use dev-c++ with g++ (GCC) 3.4.2 (mingw-special)
to compile my program. When I compile my program, I get some error
message like this:

=====================================================
In member function `MyType* Stack<MyType>::Delete(MyType&)':
    108 there are no arguments to `IsEmpty' that depend on a template
parameter, so a declaration of `IsEmpty' must   be available
    108 (if you use `-fpermissive', G++ will accept your code, but
allowing the use of an undeclared name is deprecated)
    108 there are no arguments to `Empty' that depend on a template
parameter, so a declaration of `Empty' must be available
    109 `array' undeclared (first use this function)
        (Each undeclared identifier is reported only once for each
function it appears in.)
    109 `top' undeclared (first use this function)
=====================================================

and I list my code below:
=====================================================
#include <iostream>
const int DefaultSize = 20;
using namespace std;

template <class MyType>
class Bag
{
public:
       Bag(int MaxSize=DefaultSize);  //建構子
       virtual ~Bag(); //解構子

       virtual void Add(MyType); // 插入element到bag裡面
       virtual MyType* Delete(MyType&); //從bag刪除element

       virtual bool IsFull(); //當bag是滿的傳回true,反之則為false
       virtual bool IsEmpty(); // 當bag是空的傳回true,反之則為false
protected:
       virtual void Full(); //bag是滿的就會執行
       virtual void Empty(); // bag是空的就會執行

       MyType *array;
       int MaxSize; //array的大小
       int top; //在array中含括element的最高位置
};

template <class MyType>
class Stack : public Bag<MyType>
{
    public:
       Stack(int MaxSize=DefaultSize); //建構子
       ~Stack(); //解構子
       MyType* Delete(MyType&);
};

int main(void)
{
       Bag <int> b(5); // 利用Bag的建構子建立一個大小為5的array

       Stack <int> s(5); //利用Stack的建構子建立一個大小為5的array

       b.Add(1);b.Add(2);b.Add(3);b.Add(4);b.Add(5);
       //用Bag::Add 呼叫 Bag::Full,Bag::IsFull
       s.Add(7);s.Add(8);s.Add(9);s.Add(10);s.Add(11);

       int x;
       b.Delete(x);
       cout << "x = " << x << endl;
       s.Delete(x);
       cout << "x = " << x << endl;
       //system("pause");
       return 0;
}

template<class MyType>
Bag<MyType>::Bag(int MaxBagSize):MaxSize(MaxBagSize){
       array = new MyType[MaxSize];top=-1;
}

template<class MyType>
Bag<MyType>::~Bag(){delete [] array ;}

template<class MyType>
inline bool Bag<MyType>::IsEmpty(){
       if(top==-1) return true ; else return false;
}

template<class MyType>
inline bool Bag<MyType>::IsFull(){
       if(top==MaxSize-1) return true ; else return false;
}

template<class MyType>
inline void Bag<MyType>::Full(){
       cerr << "DATA STRUCTURE IS FULL" << endl;
}

template<class MyType>
inline void Bag<MyType>::Empty(){
       cerr << "DATA STRUCTURE IS Empty" << endl;
}

template<class MyType>
void Bag<MyType>::Add(const MyType x){
       if(IsFull())Full();else array[++top]=x;
}

template<class MyType>
MyType* Bag<MyType>::Delete(MyType& x){
       if(IsEmpty()){Empty(); return 0;}
       int deletePos = top/2 ;
       x=array[deletePos];
       for (int index = deletePos ; index<top ; index++)
         array[index]= array[index+1];
       top--;return &x;
}

 template<class MyType>
Stack<MyType>::Stack(int MaxStackSize):Bag<MyType>(MaxStackSize){}
//constructor for stack calls constructor for bag

template<class MyType>
Stack<MyType>::~Stack(){} //用來確定array被刪除

template<class MyType>
MyType* Stack<MyType>::Delete(MyType& x)
{
       if(IsEmpty()){Empty();return 0 ; }
       x=array[top--];
       return &x;
}
=====================================================

The class Stack  is derived from the class Bag, and all the data
members are inherited from Bag.

Can any one help?

Regards
Auxo


More information about the Gcc-help mailing list