У меня следующий пример TestC - это класс шаблона. Тест класса использует шаблонный шаблон в качестве шаблона, и существует специальный член_, который является вложенным экземпляром A>. Однако жалоба компилятора на этот вопрос. Это незаконно? Или как его исправить?Как работает класс вложенных шаблонов C++?
Заранее спасибо
#include <iostream>
using namespace std;
template <class A>
class TestC {
public:
TestC(double a = 100.0) : a_(a) {};
A member_;
double a_;
};
template <template <class> class A>
class Test {
public:
Test(A<Test<A> > member = A<Test<A> >());
A<Test<A> > member_;
};
int main() {
TestC< Test<TestC> > a(10.0);
return 0;
}
Compilation error time: 0 memory: 3292 signal:0prog.cpp: In instantiation of ‘class Test’: prog.cpp:8:7: required from ‘class TestC >’ prog.cpp:21:23: required from here prog.cpp:16:17: error: ‘Test::member_’ has incomplete type A > member_; ^prog.cpp:5:7: error: declaration of ‘class TestC >’ class TestC {
^
Я предполагаю, что вы имели в виду 'TestC < Test> а; ', поскольку это означает вы объявляете функцию с именем' a'. –
user657267
, если я изменил, например. TestC < Test> a (10,0); Я думаю, что я строю объект TestC < Test>, все еще ошибка. –
David