提问人:balint.miklos 提问时间:6/19/2009 最后编辑:rtnbalint.miklos 更新时间:6/19/2009 访问量:2562
共享库中的静态类成员
Static class members in shared library
问:
我有一个这样的班级
class K {
static int a;
static int b;
}
我想创建一个包含此类的共享库(dll)。在我调用的库中编译的 cpp 文件中K
int K::a = 0;
int K::b = 0;
实例化静态变量。dll 编译时没有错误,但是当我使用该库时,我收到成员和 的未解决的外部符号错误。在我想使用它的主程序中,我在类的声明中包含相同的标头,唯一的区别是我使用的库和主程序的区别K::a
K::b
K
class __declspec( dllexport ) K { ... }
class K { ... }
可能我犯了不止一个错误,所以我的问题是,我怎么能
- 告诉链接器在库中共享静态成员类?
- 在主程序中使用库中实例化的静态类成员?
我使用Visual Studio 2008...
答:
0赞
Kieveli
6/19/2009
#1
以静态方式而不是动态方式链接图书馆。
或者在 DLL 中添加一个返回值的全局函数。
1赞
balint.miklos
6/19/2009
#2
应该在主应用程序的标头中使用。__declspec( dllimport )
所以这是解决方案。头文件(包含在库和主应用程序中)是:
#ifdef COMPILE_DLL
#define DLL_SPEC __declspec( dllexport )
#else
#define DLL_SPEC __declspec( dllimport )
#endif
class DLL_SPEC K {
static int a;
static int b;
}
库中的 cpp 文件包含:
int K::a = 0;
int K::b = 0;
要编译库,必须定义宏COMPILE_DLL,对于主应用程序,不应定义宏。
上一个:未解析的外部符号 [重复]
下一个:初级 C++:基类中的虚函数
评论