2010-09-20 223 views
4

我是C++的新手。你可以請幫我擺脫錯誤的:C++不能實例化抽象類

錯誤C2259:「MinHeap」:不能實例化抽象類

智能感知:返回類型是不相同的,也不符合返回類型協「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 2010-09-20 09:41:27

+0

我想這需要一個「家庭作業」標籤?否則,建議將是「不要自己實施」。 – sbi 2010-09-20 09:44:19

+0

是家庭作業問題。 – devnull 2010-09-20 09:48:47

回答

6

問題是與const T& Top()int Top()。後者與前者不同,因此不是一個覆蓋。取而代之的是隱藏了的基類功能。您需要返回完全相同的基類版本:const int& Top() const
同樣的問題存在Push(),BTW。

+0

'void Push(int item)'應該是'void Push(const int&item)' – 2010-09-20 09:42:23

+0

@Charles:我剛剛添加了這個。 '')' – sbi 2010-09-20 09:43:46

+1

在工業強度的C++中,你實際上想要類似'return_type :: type Top()const',其中'return_type :: type'通常是'T const',但是'return_type :: type'只是普通的'int'。 – MSalters 2010-09-20 11:14:08

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和Push