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

时间:2015-12-23 09:28:06

标签: c++ visual-studio-2015

此代码曾用于Visual Studio 2015,但不再适用于Visual Studio 2015更新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'

这是编译器错误还是代码生成错误?

2 个答案:

答案 0 :(得分:3)

来自here

  

友元声明出现在一个类体中,并授予一个函数或另一个类访问友元声明出现的类的私有和受保护成员。

所以这是一个编译器错误。 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() {})。

答案 1 :(得分:2)

这是一个编译错误。它适用于VS2008