从子类

时间:2015-04-22 13:53:57

标签: c++ static initialization

我想知道是否可以从子类初始化受保护的静态成员 例如,

// head file
class Test
{
protected:
    static int i;
};
class Test2 : public Test{};

//cpp file
#include "headfile.h"
int Test2::i = 1;

如您所见,当我初始化此静态成员(i)时,我使用子类名称(Test2)。
令我惊讶的是,我使用visual studio 2013测试了这段代码,它运行正常。但是如果我在Linux下使用Netbeans(gcc11)尝试它并且我得到一个提示错误:
unable to resolve the identifier i
然后我编译了它,错误信息是:
error: ISO C++ does not permit ‘Test::i’ to be defined as ‘Test2::i’ [-fpermissive]

现在,如果我在类Test中将{protected}更改为public static int i,则错误将消失。

我很困惑......这是我第一次用gcc和vs。

找到两个不同的结果

0 个答案:

没有答案