c++ - 导出静态函数

标签 c++ visual-c++

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


class A{
   public:
   static int val;
__declspec(dllexport) static void setval(int v) {val = v;} 
};

并且 x.cpp 有


int A::val = 256;

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

最佳答案

因为您定义了内联函数,所以编译器可以在您调用它的地方自由地创建该函数的拷贝。这些拷贝无法看到该变量,因为它未导出。

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

关于c++ - 导出静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592037/

相关文章:

c++ - Qt Qt5Network 链接错误的静态构建

c++ - 使用 .reset() 释放具有唯一所有权的 boost::shared_ptr

c++ - 指向 vector : size is correct in function but 0 in caller 的指针

c++ - 内联汇编代码无法在 Visual C++ 2010 Express 中编译

c++ - 未定义对 ‘_imp__InitBizLib’ 的引用

c++ - 将 boost 打包到共享库中

c++ - 在 Qt Designer 中创建选项卡式文档界面?

c++ - 如何做 #define macro to do #define "myInt x" "int* x = new int[5]"

C++ std::random 和枚举类

c - VS2015企业版错误C4576