2010-09-20 3 views
4

Я новичок в C++. Не могли бы вы пожалуйста помочь мне избавиться от ошибок:C++ не может создать абстрактный класс

ошибка C2259: «MinHeap»: не может создать экземпляр абстрактного класса,

IntelliSense: тип возвращаемого значения не идентичны, ни ковариантны возвратного типа «Const INT &» из переопределены функция виртуальной функции

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() 
     { 
      .. 
     } 
}; 
+2

ли '' Top' И Push' сопрягать базу? (Нет) Если вы используете 'std :: priority_queue'? (Да.) – GManNickG

+0

Я полагаю, для этого нужен тег 'homework'? В противном случае совет будет «не выполнять это самостоятельно». – sbi

+0

есть домашнее задание вопрос. – devnull

ответ

6

проблема с const T& Top() против прогноза int Top(). Последнее отличается от первого и, следовательно, не является переопределением. Вместо этого скрывает базовый класс функции. Вам нужно вернуть точно так же, как в версии базового класса: const int& Top() const.
Такая же проблема существует для Push(), BTW.

+0

И 'void Push (int item)' должен быть 'void Push (const int & item)' –

+0

@Charles: Я просто добавлял это. ':)' – sbi

+1

В промышленно-сильном C++ вы действительно хотите что-то вроде 'return_type :: type Top() const', где' return_type :: type' обычно 'T const &', но 'return_type :: type' просто «int». – MSalters

2

попробовать

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() 
     { 
      .. 
     } 
}; 

Обратите внимание, что он использует const int& вместо int для Top и цанговым

Смежные вопросы