C++ 访问基类的公共成员失败

C++ 访问基类的公共成员失败,c++,templates,inheritance,members,C++,Templates,Inheritance,Members,可能有点怯懦:我有两个类,并将所有变量声明为公共。为什么我不能从派生类访问变量 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 _di

可能有点怯懦:我有两个类,并将所有变量声明为公共。为什么我不能从派生类访问变量

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]
模板
vec类{
公众:
类型*val;
整数维;
公众:
vec();
vec(右键);
vec(右键输入,整数维);
[等]
模板
vec3d类:公共vec{
公众:
vec3d():vec(0,3){};
vec3d(右键):vec(右键,3){};
vec3d(X_-val类型、Y_-val类型、Z_-val类型):vec(0,3){

val[0]=X_val;///您需要通过
this->val
vec::val
引用它们。中有一个很好的解释。

您需要通过
this->val
vec::val
引用它们。中有一个很好的解释。

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


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

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



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

谢谢。。。所以他们不是新类的实际成员,尽管定义为public??他们仍然是成员,这是一个名称查找问题。他们需要在以后查找,如果他们不符合条件。谢谢……所以他们不是新类的实际成员,尽管定义为public??他们仍然是成员,这是一个名称查找问题。他们需要如果没有完整的向量和“[etc],如果你把这个问题简化成10行的例子,那么这个问题就更容易阅读了。你能删除代码中的所有注释吗,这会让阅读变得非常困难…可能会重复,以备将来参考“.看。是的,现在有点清楚了…我认为这与公开声明有关…所有教程都受保护…就像在副本中一样。因为这不是问题,我可以使用其他线程-对不起,伙计们;)我删除了注释。它们几乎毫无价值。你能删除代码中的所有注释吗,这会让它变得更有用ally难以阅读…可能的副本供将来参考如果你把它简化为10行的例子,没有完整的向量和“[etc],这个问题会更容易阅读“.看。是的,现在有点清楚了…我认为这与公开声明有关…所有教程都受保护…就像在副本中一样。因为这不是问题,我本可以使用其他线程-对不起,伙计们;)我删除了评论。它们几乎毫无价值。好吧,这回答了我的另一个问题^^谢谢…所以这个conc如果类未模板化,ept将起作用??如果派生类不是类模板,或者基类不依赖于派生类模板的任何模板参数,则ept将起作用。好的,这回答了我的另一个问题^ThanksOh…因此,如果类未模板化,此概念将起作用??如果派生类不是类模板,或者基类不依赖于派生类模板的任何模板参数。