2013-02-26 2 views
2

Я получил при компиляции следующего кода с помощью G ++ 4.6.2двойного вложенного класс вперед объявление внутри класса шаблона

template <class T> 
class A 
{ 
public: 
    class B 
    { 
    public: 
     class C; //forward declaration 
    }; 
    class D 
    { 
    //using B 
    }; 

    class B::C // error here 
    { 
    //using D 
    }; 
//using B::C 
}; 

/* works fine, but required into "A" 
template <class T> 
class A<T>::B::C 
{ 
public: 
}; 
*/ 

Как «15:14: слишком мало шаблонных параметров списков: Ошибки» решить проблему без изменения последовательности объявлений?

+0

Что означает 'class B :: C {};' означает? – andre

+0

Если вы не вставляете номера строк, это облегчает нам помощь, так как мы можем скопировать ваш код в файл для тестирования. –

+0

'класс B :: C {...};' означает объявление класса «С» в классе «В». Это нормально, если «А» не является классом шаблонов. – yurial

ответ

0

Как вы обнаружили, вы не определяете объявленные вперед классы во внутренней области, вы должны сделать это в соответствующей внешней области. Ваш код «отлично работает», похоже, компилируется с g ++ 4.5. Вы говорите, что когда вы пытаетесь «отлично работает», линия 19 дает ошибку? Это потому, что отсутствует завершение ;.

+0

Нет, B :: C определите некоторые типы, необходимые в # 19 ('using B :: C'), и я пытаюсь объявить B :: C раньше, в строке # 15 ('class B :: C // error here'). – yurial

Смежные вопросы