c++ - Singleton DLL 中未定义的纯虚函数

标签 c++ visual-c++ dll interface singleton

我正在尝试构建一个 DLL,它将作为单例管理我的项目的各种配置选项。

我遵循了建议的方法 here in the chosen answer ,如下图:

IBuildConfiguration.h

#if defined(BUILD_CONFIGURATION_LIBRARY_EXPORT)
#   define BUILD_CONFIGURATION_API   __declspec(dllexport)
#else
#   define BUILD_CONFIGURATION_API   __declspec(dllimport)
#endif  // BUILD_CONFIGURATION_LIBRARY_EXPORT

class IBuildConfiguration
{
    public:
        virtual int foo(void) = 0; 
};

BUILD_CONFIGURATION_API IBuildConfiguration& Instance(void);

BuildConfiguration.h

class BuildConfiguration : public IBuildConfiguration
{
    public:

        BuildConfiguration();
        ~BuildConfiguration();


        virtual int foo(void);
};

编辑:忘记包含 Instance()

的实现

BuildConfiguration.cpp

int BuildConfiguration::foo(void)
{
    return 1; //just a silly example
}

IBuildConfiguration& Instance(void)
{
    static BuildConfiguration instance;
    return instance;
}

现在,在 Visual C++ 6 中,我在我的项目中添加了对这个新 DLL 的依赖,并在我的源代码中包含了 IBuildConfiguration header :

SystemCtrl.cpp

#include "../../BuildConfiguration/IBuildConfiguration.h"

IBuildConfiguration buildConfig = Instance();

我的 DLL 构建成功,但使用它的项目却没有。

不幸的是,这会导致以下错误:

int __thiscall IBuildConfiguration::foo(void)' : pure virtual function was not defined

将 DLL 和 LIB 文件复制到项目中似乎无法解决问题。

最佳答案

如果 IBuildConfiguration 没有纯虚函数,这仍然不会像您期望的那样工作:

IBuildConfiguration buildConfig = Instance();

这基本上是说“从 Instance() 的返回值复制构造一个 IBuildConfiguration 的实例”。派生类信息丢失。这是切片。您需要您的变量作为引用:

IBuildConfiguration& buildConfig = Instance();

关于c++ - Singleton DLL 中未定义的纯虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35805494/

相关文章:

C++:extern "C"和类成员之间的命名空间冲突

c++ - 如何用 int * 修改 C++ 结构

c++ - 具有现有变量的基于范围的 for 循环

java - 从 JAR 中提取和加载 DLL

c++ - 无法加载具有外部依赖项的库问题

c++ - 尝试从 DLL 加载的派生类实例访问基类 vector 成员时程序崩溃

c++ - std::vector索引总是更快吗?

C++ 读取两个数字但没有空格,RINEX 文件

c++ - 为什么逗号表达式用作放置参数时不能按预期工作?

c++ - __attribute__((destructor)) 在 VC 中等效?