我有一个带有成员的类m_preferences
(一个包含单词和特征之间关联的向量).
在这个类中,m_preferences
它不是静态的,因此该类的任何实例都具有其特定的m_preferences
.
class Base{
private:
Preferences m_preferences;
public:
...
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个派生类,它m_preferences
变为静态,因为我希望这个类的每个新实例共享相同的首选数据,无论发生什么.
class Derived: public Base{
private:
static Preferences m_preferences;
public:
...
}
Run Code Online (Sandbox Code Playgroud)
我收到了链接错误.
是否可以做我想做的事情(通过继承将非静态成员转换为静态成员)?
如果不是这种不可能性背后的哲学是什么?有计划吗?
谢谢,
此致
罗南
你不能停止的每一个实例Base
-包括每一个实例Derived
-从,因为这是由基类的定义有保证每个实例偏好成员变量.
您所做的是向该类添加一个新的静态Preferences
成员Derived
,这意味着除了Preferences
与基类关联的每个实例成员之外,您还在Preferences
所有Derived
实例之间共享一个全局实例.
因为您对这两个成员使用了相同的名称,所以在Parent
成员函数的上下文中,使用标识符m_preferences
将引用全局共享实例,除非您将其限定为Base::m_preferences
.
您的链接错误可能是因为您需要Derived::m_preferences
在其中一个翻译单元中提供定义.
例如在some.cpp中,在任何函数体之外:
Preferences Derived::m_preferences;
Run Code Online (Sandbox Code Playgroud)