可能有点懦弱的问题:我有两个类,并声明所有变量都是公开的。为什么我不能从派生类中访问变量??
g ++告诉我:vec3d.h:76:3:错误:'val'未在此范围内声明
template<typename TYPE>
class vec{
public:
TYPE *val;
int dimension;
public:
vec();
vec( TYPE right );
vec( TYPE right, int _dimension );
[etc]
template<typename TYPE>
class vec3d : public vec<TYPE>{
public:
vec3d() : vec<TYPE>( 0, 3 ){};
vec3d( TYPE right ) : vec<TYPE>( right, 3 ){};
vec3d( TYPE X_val, TYPE Y_val, TYPE Z_val ) : vec<TYPE>( 0, 3 ){
val[0] = X_val; //// <----------THIS ONE FAILS!
val[1] = Y_val;
val[2] = Z_val;
};
[etc]
答案 0 :(得分:5)
这纯粹是一个查找问题,与访问控制无关。
因为vec3d
是一个模板,并且其基类依赖于模板参数,所以基类的成员在表达式的派生类中不会自动显示,这些类是非依赖的。最简单的解决方法是使用依赖表达式(如this->X_val
)来访问基类的成员。
答案 1 :(得分:3)
您需要通过this->val
或vec<TYPE>::val
来引用它们。在this answer to a similar question中有一个很好的解释。