我将项目拆分为动态库及其客户端代码。
在库中我有类ObjectModel。
object_model.h:
class ObjectModel {
public:
virtual ~ObjectModel();
static ObjectModel& Get();
/* Some other methods */
protected:
ObjectModel();
ObjectModel( const ObjectModel& );
ObjectModel& operator=( ObjectModel& );
};
我在库和客户端代码中使用方法ObjectModel::Get()
。我没有在库中实现该方法,因为我需要获取扩展对象并在另一个项目的库中使用它。
在客户端:
#include <object_model.h>
class ExObjectModel : public ObjectModel {
}
ObjectModel& ObjectModel::Get() {
static ExObjectModel m;
return m;
}
int main() {
ObjectModel &m = ObjectModel::Get();
/* ... */
}
它完全适用于Linux。但由于错误&#34;对ObjectModel :: Get()&#34;的未定义引用,我无法使用MinGW编译DLL。是否有可能以这种方式构建DLL?
答案 0 :(得分:0)
我认为你需要使用ExObjectModel :: Get()而不是ObjectModel :: Get(),因为静态函数不能像虚函数一样工作
答案 1 :(得分:0)
根据@n.m的评论判断:
没有。如果在另一个库中实现了ObjectModel :: Get(),则需要链接该库。
答案是否定的。