如何在C ++中实现客户端DLL中声明的方法

时间:2016-11-17 06:42:29

标签: c++ dll

我将项目拆分为动态库及其客户端代码。

在库中我有类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?

2 个答案:

答案 0 :(得分:0)

我认为你需要使用ExObjectModel :: Get()而不是ObjectModel :: Get(),因为静态函数不能像虚函数一样工作

答案 1 :(得分:0)

根据@n.m的评论判断:

  

没有。如果在另一个库中实现了ObjectModel :: Get(),则需要链接该库。

答案是否定的。