Вы должны как минимум объявить NestedClass:
class NestedClass;
template<class T> class TemplateClass{};
class SomeClass : public TemplateClass<NestedClass>
{
class NestedClass{};
};
Это работает. Протестировано на MinGW c ++ для Windows.
Обновление:
@ Джон
Я попробовал следующее на gcc версии 3.4.5 в Windows XP:
#include <iostream>
class NestedClass;
template<class T> class TemplateClass{};
class SomeClass : public TemplateClass<NestedClass>
{
public:
class NestedClass{
public:
int a;
static int test(){ return 100; }
};
NestedClass nc;
};
int main(){
SomeClass sc;
sc.nc.a = 10;
std::cout<< sc.nc.a << std::endl;
std::cout<< sc.nc.test() << std::endl;
}
И я получаю следующий вывод:
10
100
Но, я думаю, что автор задумал (как предложил @jon) на самом деле это:
class SomeClass::NestedClass;
template<class T> class TemplateClass{};
class SomeClass : public TemplateClass<SomeClass::NestedClass>
{
public:
class NestedClass{};
NestedClass nc;
};
И это не работает. Причина в том, что для того, чтобы иметь возможность объявить SomeClass :: NestedClass в спецификации шаблона, SomeClass должен был быть объявлен. Но мы пытаемся сделать именно это - следовательно, мы получаем циклическую зависимость.
Так что, думаю, ответ @ jon лучше всего решит эту проблему.