Доступ к открытым членам базового класса завершается неудачно - PullRequest
1 голос
/ 02 сентября 2011

может быть немного трусливым вопросом: у меня есть два класса, и все переменные объявлены открытыми.Почему я не могу получить доступ к переменным из производного класса ??

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]

Ответы [ 2 ]

5 голосов
/ 02 сентября 2011

Это просто проблема поиска и не имеет ничего общего с контролем доступа.

Поскольку vec3d является шаблоном и его базовый класс зависит от параметра шаблона, члены базового класса не будут автоматически видны в производном классе в выражении, которые не зависят. Самое простое решение - использовать зависимое выражение, например this->X_val, для доступа к членам базового класса.

3 голосов
/ 02 сентября 2011

Вам нужно будет обратиться к ним через this->val или vec<TYPE>::val.В этом ответе на похожий вопрос есть хорошее объяснение .

...