1

少し臆病な質問かもしれません。2つのクラスがあり、すべての変数をパブリックと宣言しました。派生クラスから変数にアクセスできないのはなぜですか?

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]
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 に答える