模板类中派生类中的成员不可访问
Unreachable member in derived class in template class
以下是代码:
template <typename T>
struct Outer {
struct InnerBase {
int n;
InnerBase() : n(42) { }
};
struct InnerChild : InnerBase {
int getN() { return n; }
};
};
问题是:
In member function 'int Outer<T>::InnerChild::getN()':
error: 'n' was not declared in this scope
如果Outer
不是一个模板,那么一切都可以正常工作。为什么呢如何在模板中修复它?
InnerBase
不是一个独立类型,而是一个依赖类,因为它实际上是Outer<T>::InnerBase
。因此,InnerChild
不知道它到底是从谁那里继承的(想想专业化*!),因此它不知道n
实际上是一个名称。
要断言n
确实是类成员的名称,比如this->n
或InnerBase::n
,或者在InnerChild
中的某个点添加声明using InnerBase::n;
。
*),例如template <> struct Outer<int>::InnerBase { typedef int n; };
相关文章:
- C++ 传递指向对象的指针的指针,无法访问成员
- 从不同C++类的成员变量访问成员函数
- 使用 getter 访问成员变量C++
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- 通过多个类访问成员时出错
- 如何在使用对象指针时访问成员函数
- 为什么相应成员不能正确访问成员函数指针
- 从两个不同类继承的非虚拟基类的访问成员
- 如何使用 gcc 内联汇编器代码访问成员变量
- 如何使用常数向量访问成员函数
- 访问成员函数中参数的类成员
- C++嵌套结构初始化和访问成员
- 通过指向班级第一个成员的指针访问成员是不确定的行为吗?
- 如何使用C STD :: SET中的迭代器访问成员功能
- 访问成员C 时,结构的向量生成了范围的错误
- 带指针的班级访问成员
- 从聚合类访问成员变量
- 如何访问成员变量 sqlite 回调
- ctypes/C++segfault访问成员变量
- 通过父类型的指针或直接从派生类访问成员函数的差异