gpt4 book ai didi

纯虚类的 c++11 friend 无法访问私有(private)方法

转载 作者:行者123 更新时间:2023-11-30 01:40:37 27 4
gpt4 key购买 nike

我正在使用 g++ 4.8.4
纯虚类 Derived 的友元 Friend 不能访问 Derived 的私有(private)方法,除非明确声明了纯虚函数。
代码:

class Friend;
class Base {
private:
virtual void doSomething() = 0;
};

class Derived: public Base {
private:
friend class Friend;
};

class Friend {
public:
void doSomething() { derived->doSomething(); };
private:
Derived* derived;
};

编译报如下错误:

error: ‘virtual void Base::doSomething()’ is private

修复错误的方法是专门为 Derived 声明 doSomething():

class Derived: public Base {
private:
virtual void doSomething() = 0;
friend class Friend;
};

为什么?
它应该那样做吗?

最佳答案

问题是 doSomethingBase 中声明为 private。这意味着即使派生类也不能访问它。将其移至 protected 并且它应该可以工作:

class Base {
protected:
virtual void doSomething() = 0;
};

此外,由于 Derived 没有实现该功能,它也将被视为抽象基类(您不能创建实例)。

关于纯虚类的 c++11 friend 无法访问私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42904354/

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