Т не класс, но это - PullRequest
0 голосов
/ 01 сентября 2010

Почему это не работает? (Ради бога!)

template<class T>
class A
{
    typedef typename T::value_type value_type;
public:
    A();
};

Я получаю следующую ошибку:
Ошибка 1 Ошибка C2825: «T»: должен быть класс или пространство имен, после которого следует «::

Но Т - это класс, я только что уточнил, не так ли? Так в чем же проблема?
Благодаря.

Ответы [ 4 ]

7 голосов
/ 01 сентября 2010

T может быть примитивным типом, в зависимости от того, как вы создаете экземпляр шаблона ...

2 голосов
/ 02 сентября 2010

Ключевое слово 'class' имеет другое значение, когда используется для указания параметра типа шаблона. Фактически, template<class T> и template <typename T> полностью эквивалентны, и T может быть любого типа. Запись template<class T> никоим образом не говорит компилятору, что T должен быть только типом класса.

2 голосов
/ 01 сентября 2010

В какой специализации шаблона вы получаете эту ошибку?Может быть, вы делаете что-то вроде A<int> где-то в коде.Пожалуйста, дайте больше информации о специализации, которая дает ошибку, если вы хотите получить более подробную информацию.

0 голосов
/ 02 сентября 2010

Только к сведению: Visual C ++ выдает такую ​​ошибку только при возникновении связанной проблемы при создании конкретного класса из шаблона.По сообщению об ошибке вы сможете легко определить, где это произошло, и изучение этого кода может значительно помочь вам решить такие проблемы.

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