导出静态函数

vge*_*eta 1 c++ visual-c++

我在 dll-1 的头文件 xh 中定义了一个类,它是


class A{
   public:
   static int val;
__declspec(dllexport) static void setval(int v) {val = v;} 
};
Run Code Online (Sandbox Code Playgroud)

和 x.cpp 有


int A::val = 256;
Run Code Online (Sandbox Code Playgroud)

现在我构建了 dll-1 并且它通过了,但是链接该 dll 的其他 dll 无法构建,并出现错误 unresolved external symbol public: static int A::val。当我在 x.cpp 中定义导出函数时,这个问题得到了解决。但我不明白为什么它坏了。谢谢。

Mar*_*som 5

由于您内联定义了该函数,因此编译器可以在您调用该函数的位置自由创建该函数的副本。这些副本无法看到该变量,因为它未导出。

当您将函数定义移至 .cpp 时,所有调用都会返回到 DLL,这可以在创建 DLL 时解析变量。