dll导出类的静态成员变量没有调用构造函数

zhangwuji156 2017-02-12 04:58:18

//.h文件
#ifdef MYCLASS_EXPORTS
#define DLL_CLASS __declspec(dllexport)
#else
#define DLL_CLASS __declspec(dllimport)
#endif

class DLL_CLASS myclass
{
static vector<int> v;
}

//在.cpp文件中也定义了v
vector<int> myclass::v;


使用v的时候会崩,后来用自己定义了个类class A做测试,发现声明为类的静态成员变量,不会调用构造函数。
就是说vector的构造函数没有被调用。
而在我做的测试工程里,在使用前是会调用构造函数的。
为什么会这样?
另外,也试了在定义v的时候导出
DLL_CLASS vector<int> myclass::v;
也不行。
一般如果是没导出定义的话,是链接不过,我这个是能编译、链接通过,运行时崩溃,原因是变量构造函数没执行。

http://stackoverflow.com/questions/21454555/c-constructor-of-static-member-class-not-called
有老外和我有同样的问题
...全文
622 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saleayas 2017-02-15
  • 打赏
  • 举报
回复
你能够编译通过吗? 你的 std::vector 是模板,不是 __declspec( dllexport ) 的。
hityct1 2017-02-13
  • 打赏
  • 举报
回复
关注一下!!!
真相重于对错 2017-02-13
  • 打赏
  • 举报
回复
不是没调用,而是static 类成员的特殊性造成,客户端无法正常访问dll里面的类的static成员 解决方案: 对那个static 成员做一个get set 访问器
oyljerry 2017-02-13
  • 打赏
  • 举报
回复
不用静态试试呢,或者加一个初始化函数,来初始化所有成员变量
  • 打赏
  • 举报
回复
导出函数要C兼容,否则都是坑 导出class无疑是给自己挖坑
走好每一步 2017-02-13
  • 打赏
  • 举报
回复
都是导c接口,不敢用c++。怕
schlafenhamster 2017-02-12
  • 打赏
  • 举报
回复
为什么要 static ?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧