2011-03-20 118 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它。