2011-03-20 215 views
1

我正在嘗試聲明一個抽象類,但只是虛擬函數模板的行爲會使編譯器發出抱怨。這通常如何完成?例如,在我的頭文件中,我有:虛擬模板?

virtual SpecialList<Point> *getPoints() const; 

編譯器聲明「ISO C++禁止聲明'SpecialList'沒有類型。」

編輯 Point和SpecialList都包含在這個類的定義中。作爲一個更詳細的例子,

// SomeClass.h 
#include "SpecialList.h" 
#include "Point.h" 

class SomeClass 
{ 
public: 
    SomeClass(); 
    virtual SpecialList<Point> *getPoints() const; 
//snip 
}; 

還沒解決..

+2

您是否在「虛擬專用清單 * getPoints()const」之前定義或包含了Point類? – MerickOWA 2011-03-20 17:31:57

回答

3

它看起來像你使用它之前,你還沒有定義Point

在抽象類之前定義Point,或者包含它定義的頭文件!

-

或者在情況下,如果你想定義虛擬函數模板,像這樣:

template<typename Point> 
virtual SpecialList<Point> *getPoints() const; 

然後,它是不可能的。虛擬函數模板是不允許的!

4
struct A 
{ 
    virtual vector<int>* f() const = 0; 
}; 

適合我。確保'SpecialList'和'Point'在你使用它們之前被定義。

0

檢查您是否包括SpecialList和Point類聲明或者前向聲明或typedefed它。