c++ - 制作C++ DLL : static variable initialization problem

标签 c++ oop dll

我正在尝试用 C++ 制作一个 DLL,我可以在其他项目中使用它。 我的一个类看起来像这样

我的类.h:

#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif

template <typename T, typename C>
class MYDLL_API MyClass
{
    private:
      static C *variable;

    //...
};

我的类.cpp:

#include "stdafx.h"
#include "MyClass.h"

template <typename T, typename C>
C *MyClass<T, C>::variable= NULL;

当我编译它时,我得到这个变量的“error LNK2001: unresolved external symbol ...”。 在我尝试制作 DLL 之前,这段代码运行良好......

请帮我解决这个问题。

最佳答案

您不能将模板类放入 DLL 中,因为那样根本行不通:当您为模板指定实际类型时,编译器会发出类的实际代码(这就是 STL 作为源代码提供的原因)。

只需创建一个 .h 文件并在其中添加所有实现。在其他项目中,包含它:

// MyClass.h
template <typename T, typename C>
class MyClass
{
    private:
       static C *variable;

    //...
};

template <typename T, typename C>
   C *MyClass<T, C>::variable= NULL;


// OtherProject.cpp
#include "MyClass.h"
// ...
MyClass<int, char> instance;  //...

如果您确定知道其他项目将使用哪些类型,您可以使用显式实例化,只需添加如下内容:

// explicitly instantiate class
template class MyClass<int, char>;

进入MyClass.cpp

关于c++ - 制作C++ DLL : static variable initialization problem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7393482/

相关文章:

c++ - 通过 QMetaObject::invoke 调用 QListView setModel 问题

c++ - wxWidgets PostNcDestroy 等价物

c# - Unity找不到其他DLL的DLL依赖关系(均在Assets文件夹中)

delphi - Inno Setup 无法导入 DLL

c++ - 我应该在传递结构时放置 & 吗?

python - 使用 python 面向对象方法的游戏开发。

c# - 设计状态链

Javascript 子类化。设置构造函数属性

c++ - bazel可以构建dll吗?

C++ concat const char 与 char