我无法相信 gcc 不会接受以下代码...请告诉我是否真的不可能从基本模板访问内部类,或者我是否遗漏了什么?
template <class T> class BaseClass
{
public:
struct MyStruct
{
T *data;
};
};
template <class T> class ChildClass : public BaseClass <T>
{
public:
void problem()
{
MyStruct ms1; //error: 'MyStruct' was not declared in this scope
::MyStruct ms2; //error: '::MyStruct' has not been declared
BaseClass<T>::MyStruct ms3; //error: expected `;' before 'ms3'
}
};
最佳答案
问题是 MyStruct
是一个从属名称,因此您必须告诉编译器推迟名称查找,直到通过使用基类名称限定模板来实例化它:
typename BaseClass<T>::MyStruct ms1;
有关更多信息,我阅读了 Parashift C++ FAQ 条目,"Why am I getting errors when my template-derived-class uses a nested type it inherits from its template-base-class?"
关于c++ - 模板继承内部类访问问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6013786/