C ++: «ошибка: ожидаемое имя класса перед маркером‘ {’» при наследовании класса шаблона - PullRequest
8 голосов
/ 17 апреля 2011

Я искал решение своей проблемы и нашел много о циклических ссылках и проблемах с пространством имен (ни одна из них не применима в моем случае), но ничего похожего на проблему, с которой я столкнулся.

У меня естькласс шаблона, определенный и реализованный в maths / matrix.h:

template<class T>
class Matrix
{
public:
    // constructors, destructors and what not...
};

У меня есть другой класс шаблона, определенный и реализованный в maths / vector.h

#include <maths/matrix.h>

template<class T>
class Vector : public Matrix
{
public:
    // constructors, destructors and what not...
};

"Я получаю эту ошибку" ожидаетсяclass-name перед '{' token "в vector.h, что действительно меня беспокоит.Это не имеет ничего общего с matrix.h и vector.h, находящимися в подпапке maths, потому что я могу без проблем использовать matrix.h в других частях моего приложения.Я думаю, что это как-то связано с тем, что Matrix является шаблонным классом, потому что когда я делаю Vector подклассом не шаблонного класса (например, SomeClass.h), все компилируется нормально.

Большое спасибо всем, кто может помочь:)

Ответы [ 2 ]

12 голосов
/ 17 апреля 2011

Вам необходимо наследовать от конкретного класса , то есть от Matrix<T>, а не просто Matrix:

template<class T>
class Vector : public Matrix<T>
{
    …
};
6 голосов
/ 17 апреля 2011

Вам не хватает двух вещей.

template<typename T>
class Vector : public Matrix <T> //<----- first : provide the type argument
{

}; //<-------- second : semi-colon (same from Matrix class also)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...