我想知道是否可以从子类初始化受保护的静态成员 例如,
// 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。
找到两个不同的结果