朋友类无法访问受保护的成员

friend class cannot access protected member

本文关键字:受保护 成员 访问 朋友      更新时间:2023-10-16

此代码过去可以很好地与Visual Studio 2015配合使用,但现在不再与Visual Studio 15更新1配合使用。

class Foo
{
protected:
    virtual ~Foo() {};
    friend class Foo__init;
};
class Foo__init
{
public:
    Foo _init;
};
static Foo__init _Foo_init;

它失败,并出现以下错误:

Error   C2248   'Foo::~Foo': cannot access protected member declared in class 'Foo'

这是编译器错误还是代码格式错误?

从这里开始:

友元声明出现在类主体中,并将函数或其他类访问权限授予友元声明所在类的私有成员和受保护成员。

所以这是一个编译器错误。g++ (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010Ubuntu clang version 3.6.2-1 (tags/RELEASE_362/final) (based on LLVM 3.6.2)都编译了这个代码(我添加了int main() {})。

这是一个编译器错误。它在VS2008 中工作