tags:

views:

116

answers:

2

I am new to C++. Could you pls help me get rid of the errors:

error C2259: 'MinHeap' : cannot instantiate abstract class

IntelliSense: return type is not identical to nor covariant with return type "const int &" of overridden virtual function function

template <class T> class DataStructure { 
    public:
        virtual ~DataStructure () {}

        virtual bool IsEmpty () const = 0;    

        virtual void Push(const T&) = 0;

        virtual const T& Top() const = 0;

        virtual void Pop () = 0;
};

class MinHeap : public DataStructure<int>
{
    private:
        std::vector<int> A;       

    public:
        bool IsEmpty() const
        {
            ..
        }

        int Top() const
        {
           ..         
        }

        void Push(int item)
        {
            ...
        }

        void Pop()
        {
            ..
        }   
};
+6  A: 

The problem is with const T& Top() vs. int Top(). The latter is different from the former, and thus not an override. Instead it hides the base class function. You need to return exactly the same as in the base class version: const int& Top() const.
The same problem exists for Push(), BTW.

sbi
Charles Beattie
@Charles: I was just adding this. `:)`
sbi
MSalters
+2  A: 

try

class MinHeap : public DataStructure<int>
{
    private:
        std::vector<int> A;       

    public:
        bool IsEmpty() const
        {
            ..
        }

        const int& Top() const
        {
           ..         
        }

        void Push(const int& item)
        {
            ...
        }

        void Pop()
        {
            ..
        }   
};

Note that it is using const int& instead of int for Top and Push

Thomas Lötzer