C++中protected静态成员继承问题:子类定义报错如何解决?
问题解决:ISO C++ 不允许将A::abc定义为B::abc
错误原因
静态成员abc是在基类A中声明的,它属于A类本身,而非任何派生类。即便B公有继承了A,也不能把这个静态成员当作B的成员来定义——C++标准明确禁止这种跨类的静态成员定义行为。
正确解决方案
如果你想初始化A中声明的静态成员abc,必须在Class.cpp中使用基类A的作用域来定义:
int A::abc = 123;
扩展:如果需要B拥有独立的静态成员abc
如果你的需求是让B拥有自己的同名静态成员,需要先在B类中重新声明这个静态成员,再单独定义:
- 在Class.h的
B类中添加声明:
class B : public A { protected: static int abc; // 声明B自己的静态成员 // ...其他成员 };
- 在Class.cpp中定义
B的静态成员:
int B::abc = 123;
此时A::abc和B::abc是两个完全独立的静态成员,各自属于对应的类。
内容的提问来源于stack exchange,提问作者игорь кочнов
相关产品推荐
相关产品推荐

