gpt4 book ai didi

c++ - 模板内的继承 - 公共(public)成员变得不可见?

转载 作者:行者123 更新时间:2023-11-28 08:28:54 25 4
gpt4 key购买 nike

我正在尝试在类模板(内部类)内定义的类之间使用继承。但是,编译器 (GCC) 拒绝让我访问基类中的公共(public)成员。

示例代码:

template <int D>
struct Space {
struct Plane {
Plane(Space& b);
virtual int& at(int y, int z) = 0;
Space& space; /* <= this member is public */
};

struct PlaneX: public Plane {
/* using Plane::space; */
PlaneX(Space& b, int x);
int& at(int y, int z);
const int cx;
};

int& at(int x, int y, int z);
};

template <int D>
int& Space<D>::PlaneX::at(int y, int z) {
return space.at(cx, y, z); /* <= but it fails here */
};

Space<4> sp4;

编译器说:

file.cpp: In member function ‘int& Space::PlaneX::at(int, int)’:file.cpp:21: error: ‘space’ was not declared in this scope

如果 using Plane::space; 被添加到类 PlaneX 的定义中,或者如果通过 this 指针访问基类成员,或者如果类 Space被更改为非模板类​​,那么编译器就可以了。

我不知道这是 C++ 的一些模糊限制,还是 GCC 中的错误(GCC 版本 4.4.1 和 4.4.3 已测试)。有人有想法吗?

最佳答案

应该是c++的两阶段名字查找相关的问题:

http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Name-lookup.html#Name-lookup

关于c++ - 模板内的继承 - 公共(public)成员变得不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3034632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com