c++ DLL的制作:静态变量初始化问题
Making of C++ DLL: static variable initialization problem
我正试图在c++中制作一个DLL,我可以在其他项目中使用。我的一个类是这样的
MyClass.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;
//...
};
MyClass.cpp:
#include "stdafx.h"
#include "MyClass.h"
template <typename T, typename C>
C *MyClass<T, C>::variable= NULL;
当我编译它时,我得到这个变量的"错误LNK2001:未解析的外部符号…"。这段代码在我试图使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
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 模板基类中的静态变量
- 类和静态变量
- 不同作用域中的静态变量和全局变量
- 静态变量声明和定义
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在类中继承静态变量?
- "local scope"中的 C++ 初始化静态变量
- 使用静态变量的递归调用的不同输出
- 复制文件流C++静态变量
- 跨模板化函数编译的静态变量
- C++编译器是否优化了顺序静态变量读取?
- C++,每个循环初始化一个新的静态变量
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- 程序如何知道静态变量是否需要初始化?
- 类外的静态变量实例化
- 无法解析静态变量
- 函数局部静态变量:从性能角度来看的优点/缺点
- 访问从 CPP 文件到其他头文件的静态变量