我有一个带有静态成员的类,成员的定义在cpp文件中。
我必须在两个不同的DLL中使用相同的成员定义,因此我需要在两个项目中包含cpp定义以进行编译。这是一个新的"版本"该成员。这意味着cpp在两个地方编译,它将有两个定义。
如何在两个DLL中只有一个定义。 或者我做错了什么或者我错过了什么?
在.h
class qwerty
{
public:
static xyz* abc;
};
在.cpp
中xyz* qwerty::abc = new xyz();
在两个DLL中,我包含了我需要的.h和.cpp在项目中的链接。
感谢。
答案 0 :(得分:0)
解决方法是将该静态成员包装到提供它的静态成员函数中。如此:
class qwerty
{
public:
static xyz* get_abc();
};
在cpp文件中(仅在DLL中):
xyz* qwerty::get_abc() {
static xyz inst;
return &inst;
};
这是一个很好的旧时尚迈耶斯'单身风格。
N.B。:我希望我不必告诉你有关传递C ++对象或通过模块边界导出类的ABI相关危险,对吗?