Не удается получить доступ к публичным членам базового класса

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

g ++ сообщает мне: vec3d.h: 76: 3: error: «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]

person 0815ZED    schedule 02.09.2011    source источник
comment
Можете ли вы удалить все комментарии в этом коде, это действительно затрудняет чтение ...   -  person Tony The Lion    schedule 02.09.2011
comment
возможный дубликат Защищенного от доступа члена класса в производном класс   -  person CB Bailey    schedule 02.09.2011
comment
Для дальнейшего использования этот вопрос было бы легче прочитать, если бы вы сократили его до 10-строчного примера без полного вектора и '[etc]'. См. Краткий, автономный, правильный (компилируемый), пример.   -  person Flexo    schedule 02.09.2011
comment
да, теперь это немного яснее ... я подумал, что это как-то связано с публичным заявлением ... все руководства действительно защищены ... как в дубликате. Поскольку это не проблема, я мог бы использовать другую ветку - извините, ребята;)   -  person 0815ZED    schedule 02.09.2011
comment
Я удалил комментарии. В любом случае они в основном были бесполезны.   -  person sbi    schedule 02.09.2011


Ответы (2)


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

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

person CB Bailey    schedule 02.09.2011
comment
Хорошо, это ответ на мой другой вопрос ^^ Спасибо - person 0815ZED; 02.09.2011
comment
О ... Значит, эта концепция будет работать, если класс не задан по шаблону ?? - person 0815ZED; 02.09.2011
comment
Было бы хорошо, если бы производный класс не был шаблоном класса или если бы базовый класс не зависел ни от одного параметра шаблона в шаблоне производного класса. - person CB Bailey; 02.09.2011