Виртуальные шаблоны? - PullRequest
1 голос
/ 20 марта 2011

Я пытаюсь объявить абстрактный класс, но сам факт создания шаблона виртуальной функции заставляет компилятор жаловаться. Как это обычно достигается? Например, в моем заголовочном файле у меня есть:

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
};

Все еще не решена ..

Ответы [ 3 ]

4 голосов
/ 20 марта 2011
struct A
{
    virtual vector<int>* f() const = 0;
};

У меня отлично работает. Убедитесь, что «SpecialList» и «Point» определены, прежде чем использовать их.

3 голосов
/ 20 марта 2011

Похоже, вы не определили Point, прежде чем использовать его.

Определите Point перед абстрактным классом или включите заголовочный файл, в котором он определен!

-

Или, если вы пытаетесь определить шаблон виртуальной функции, что-то вроде этого:

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

Тогда это невозможно. шаблон виртуальной функции недопустим!

0 голосов
/ 20 марта 2011

Убедитесь, что вы # включили объявления классов SpecialList и Point, либо объявили форвард, либо определили его тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...