DLL中的多个静态const int类变量

时间:2017-05-31 14:11:28

标签: c++ visual-studio dll static

我正在开发一个创建多个DLL的传统VS2015应用。它们都包含一个声明/定义静态数据的.h文件。预处理后变为:

class __declspec(dllexport) J
{
public:
   static const unsigned int SA_UNSPECIFIED  = 1;
   ...
};

在我的应用.cpp文件中,我包含相同的.h文件,以及预处理(#ifdef等)到此:

class __declspec(dllimport) J
{
public:
   static const unsigned int SA_UNSPECIFIED  = 1;
   ...
};

我的主要症状是我的应用说在链接期间无法找到J::SA_UNSPECIFIED。应用程序“引用”(使用VS中的“引用”树)导出J的其他DLL。

我认为这与"Why static variable needs to be explicitly defined?"不同,因为我使用的是const积分,而不是一般情况。在这种情况下,这不是真的吗?

  1. 我甚至被允许这样做吗?也就是说,在几个不同的dll中定义static const数据,并期望它能够工作吗?
  2. 我尝试取出作业,并将它们放入单独的.cpp文件中。但是有些代码使用static const语句中的case变量。这项工作正常,直到我完成任务;然后case说它需要一个恒定的表达(当然)。
  3. 我不能inline这些; VS说这是一个错误。
  4. 该组中的其他开发人员使用相同的代码和项目文件,可以无错误地构建。我还没有比较VS版本。
  5. 答案: 事实证明,在我的应用程序中,我以非整数方式使用SA_UNSPECIFIED,因此无法再在类定义中初始化。

0 个答案:

没有答案