Данный код не комплиться под VS 2005, хотя компилится здесь —
http://www.comeaucomputing.com/tryitout/
template<class T> class zzz
{
public:
class qqq
{
public:
void f1();
qqq f2();
};
};
int main(void)
{
return 0;
}
template<class T> void zzz<T>::qqq::f1()
{}
template <class T> zzz<T>::qqq zzz<T>::qqq::f2()
{
zzz<T>::qqq x;
return x;
}
Т.е. если вложенный класс возвращает значение своего типа, то выдается ошибка:
Error 2 error C2143: syntax error : missing ';' before 'zzz<T>::qqq::f2'
Error 3 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
Error 4 fatal error C1903: unable to recover from previous error(s); stopping compilation
Бороться можно, определив локальный класс внутренне, но как решить проблему внешне?
Здравствуйте, Аноним, Вы писали:
А>Т.е. если вложенный класс возвращает значение своего типа, то выдается ошибка:
А>Error 2 error C2143: syntax error : missing ';' before 'zzz<T>::qqq::f2'
А>Error 3 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
А>Error 4 fatal error C1903: unable to recover from previous error(s); stopping compilation
странно, а у меня немножко не так
1>test1.cpp
1>.\test1.cpp(481) : warning C4346: 'zzz<T>::qqq' : dependent name is not a type
1> prefix with 'typename' to indicate a type
1>.\test1.cpp(481) : error C2143: syntax error : missing ';' before 'zzz<T>::qqq::f2'
1>.\test1.cpp(481) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>.\test1.cpp(481) : fatal error C1903: unable to recover from previous error(s); stopping compilation
А>Бороться можно, определив локальный класс внутренне, но как решить проблему внешне?
лучше не дизейблить нужные варнинги..
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Граблю зовут typename
template <class T> typename zzz<T>::qqq zzz<T>::qqq::f2()
{
zzz<T>::qqq x;
return x;
}
Здравствуйте, pasenger, Вы писали:
P>Граблю зовут typename
P>template <class T> typename zzz<T>::qqq zzz<T>::qqq::f2()
P>{
P> zzz<T>::qqq x;
P> return x;
P>}
Спасибо огромное!