C++11 纯虚拟类的朋友无法访问私有方法
c++11 friend of pure virtual class can't access private methods
我正在使用g++ 4.8.4
.
纯虚类Derived
的友Friend
无法访问Derived
的私有方法,除非明确声明纯虚函数。
法典:
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;
};
编译给出以下错误:
错误:"虚拟空虚基础::d oSomething(("是私有的
修复错误的是专门为Derived
声明doSomething()
:
class Derived: public Base {
private:
virtual void doSomething() = 0;
friend class Friend;
};
为什么?
它应该那样做吗?
问题是doSomething
在 Base
中声明为 private
。这意味着即使是派生类也无法访问它。将其移动到protected
,它应该可以工作:
class Base {
protected:
virtual void doSomething() = 0;
};
此外,由于Derived
没有实现该函数,因此它也将被视为抽象基类(您无法创建实例(。
相关文章:
- 跨 DLL 边界访问虚拟方法是否安全/可能?
- 初始化指向类实例的智能指针并访问其方法
- Windows C++静态库在初始化期间无法访问外部方法
- 如果指针的子类的方法对于子类是唯一的,如何访问这些方法?
- 当对象为值时访问实例方法<map>
- 从父对象 c++ 访问子方法
- 从不同QThread访问QOBject方法的安全性
- 启用和访问模板方法
- 无法访问静态方法(C )
- 有关使用矢量迭代器访问对象方法的问题
- 私下声明的对象变量的突变器/访问器方法
- C++11 纯虚拟类的朋友无法访问私有方法
- 我的类中有方法的指针数组,但我不能调用我的方法.代码如下
- 访问类方法中的私有指针变量C++
- C - 函数能够访问类方法,而不会创建静态或对象
- 如何在C++函数中访问类方法
- 当容器在班级中作为私人成员时,如何访问容器方法
- 链接时突然无法访问私有方法
- 如何使从基类继承的对象访问字符方法,但有自己的结果
- 在Windows Vista+上不注册proppage.dll,是否有方法访问远程过滤器图?