gpt4 book ai didi

c++ 不能使用与私有(private)基类相同的类

转载 作者:行者123 更新时间:2023-12-01 14:03:44 26 4
gpt4 key购买 nike

我想知道为什么以下示例无法编译:
我有一个 ImageContainer 类,它私下继承自 Image(因此,它的用户不应该知道它继承自 Image)。
此类还包含图像列表并具有 AddImage 函数。

class ImageContainer: private Image {
public:
ImageContainer (){};

void addImage (const Image &img){
//adds image to the container
};

std::vector<Image> images;
};

class DerivedImageContainer: public ImageContainer {
public:

void init () {
addImage (Image (background, Position(960, 533), Align::MiddleCenter));
}
};
我想从派生类 (DerivedImageContainer) 调用 addImage 函数,将新图像添加到列表中。
我很惊讶地发现这无法编译。错误是:
error: ‘class Image Image::Image’ is inaccessible within this context
我正在创建一个与 ImageContainer 的基类绝对不相关的图像
而且我什至没有触及 ImageContaner 的内部东西,我只是在调用一个公共(public)函数。为什么编译器会提示?
这是否意味着,在派生函数中,我们不能在类层次结构中的某个位置使用与私有(private)继承类具有相同类型的成员?
它不适用于 g++ 4.8.2 和 g++ 7.5.0

最佳答案

在名称查找之后执行访问检查。这里的问题是范围。在一个类的范围内,非限定名称查找从它内部进行到它的基类。所以它找到Image作为基础的类型名称。然后它必须检查这个基地的可访问性。因此错误。
补救措施是不要进行不合格的名称查找。指定 Image通过另一种方式。

addImage ( ::Image (background, Position(960, 533), Align::MiddleCenter) );
::Image是命名空间范围内类型的完全限定名称。所以它跳过了类范围内的查找。

关于c++ 不能使用与私有(private)基类相同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62652335/

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