访问基类的公共成员失败

发布于 2024-12-02 18:05:54 字数 732 浏览 1 评论 0原文

可能是一个有点胆怯的问题:我有两个类,并将所有变量声明为公共。为什么我无法访问派生类中的变量?

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]

might be a bit of a coward-ish question: I've got two classes, and declared all variables public. Why can't I access the variables from derived class??

g++ tells me: vec3d.h:76:3: error: ‘val’ was 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]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

腹黑女流氓 2024-12-09 18:05:54

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

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

This is purely a lookup issue and nothing to do with access control.

Because vec3d is a template and its base class depends on the template parameter, the members of the base class are not automatically visible in the derived class in expression that are non-dependent. The simplest fix is to use a dependent expression such as this->X_val to access members of the base class.

还给你自由 2024-12-09 18:05:54

您需要通过 this->valvec::val 引用它们。 类似问题的答案。

You will need to refer to them via this->val or vec<TYPE>::val. There's a good explanation in this answer to a similar question.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文