1

可能是一个有点懦弱的问题:我有两个类,并将所有变量声明为 public。为什么我不能从派生类访问变量?

g++ 告诉我:vec3d.h:76:3: error: 'val' is not declared in this scope

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]
4

2 回答 2

5

这纯粹是一个查找问题,与访问控制无关。

因为vec3d是一个模板,它的基类依赖于模板参数,所以基类的成员在非依赖的派生类中不会自动可见。最简单的解决方法是使用依赖表达式,例如this->X_val访问基类的成员。

于 2011-09-02T08:46:19.367 回答
3

您需要通过this->val或引用它们vec<TYPE>::val在这个对类似问题的回答中有一个很好的解释。

于 2011-09-02T08:44:21.123 回答