"ожидаемый спецификатор вложенного имени перед ошибкой "const" с именем типа const в g++
у меня есть этот код на C++
template<typename T>
class DD
: public enumerables<T>
{
...
private:
typename const DD<T>& mContainer;
}
и это дает мне два сообщения об ошибке :
- ошибка: ожидаемый спецификатор вложенного имени перед 'const'
- ошибка: недопустимый Декларатор перед ' & ' token
что с typename const
код? Он компилирует нормально с индекса MSVC с++.
добавил
typename DD<T>& const mContainer;
и const typename DD<T>& mContainer;
дайте мне ту же ошибку.
2 ответов
что это typename
что там делаешь? Вы не имеете в виду вложенный тип, поэтому typename
там совершенно не нужно. Я бы сказал, что ошибка вызвана этим неоправданным использованием typename
, не путем упорядочения частей декларации или чего-либо еще.
Это должно быть просто
const DD<T>& mContainer;
или даже
const DD& mContainer;
за исключением введения параметра типа шаблона, ключевое слово typename
должны всегда сразу же после этого следует дополнительная глобальная область ::
маркер, а затем вложенное-имя-описатель; то есть то, что имеет одно или несколько пространств имен или классов, за каждым из которых следует ::
маркер.
см. правила синтаксиса в стандарте C++: 5.2 (приведение в стиле функции), 7.1.5.3 (разработанный спецификатор типа) и 7.3.3 (использование декларация.)
также, 14.6p5: "ключевое слово typename
распространяются только на определенные имена, но эти имена не должны быть зависимыми."
компилятор Microsoft неправильно принимает недопустимый синтаксис.