给出以下代码,
#include <sstream>
#include <stdint.h>
template <typename D> void func() {
std::basic_stringstream<D> outStream;
D suffix = 0;
outStream << suffix;
}
void main() {
func<char>(); // OK
func<wchar_t>(); // OK
func<uint16_t>(); // generates C2491
}
以下编译错误是什么意思?
错误C2491:'std :: numpunct&lt; _Elem&gt; :: id':不允许定义dllimport静态数据成员
答案 0 :(得分:3)
您无法使用
声明方法_declspec(dllimport)
并为他们提供定义。
限定符告诉编译器该函数是从与您现在编译的库不同的库中导入的,因此为它提供定义是没有意义的。
包含标题时,限定符应为
_declspec(dllimport)
当您编译提供方法定义的模块时,它应该是:
_declspec(dllexport)
通常的做法是:
#ifdef CURRENT_MODULE
#define DLLIMPORTEXPORT _declspec(dllexport)
#else
#define DLLIMPORTEXPORT _declspec(dllimport)
#endif
define CURRENT_MODULE
仅在包含定义的模块中定义,因此在编译该模块时,会导出该方法。包含标题的所有其他模块都没有定义CURRENT_MODULE
,并且将导入该函数。
我猜你的指示 - _declspecimport
- 与此类似。