gpt4 book ai didi

visual-c++ - C2491 : 'std::numpunct<_Elem>::id' : definition of dllimport static data member not allowed

转载 作者:行者123 更新时间:2023-12-02 10:40:40 31 4
gpt4 key购买 nike

给定以下代码,

#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
}

以下编译错误是什么意思?

error C2491: 'std::numpunct<_Elem>::id' : definition of dllimport static data member not allowed

最佳答案

你不能用

_declspec(dllimport)

并为它们提供定义。

限定符告诉编译器该函数是从与您现在正在编译的库不同的库中导入的,因此为它提供定义是没有意义的。

包含标题时,限定符应该是
_declspec(dllimport)

当您编译为该方法提供定义的模块时,它应该是:
_declspec(dllexport)

通常的做法是:
#ifdef CURRENT_MODULE
#define DLLIMPORTEXPORT _declspec(dllexport)
#else
#define DLLIMPORTEXPORT _declspec(dllimport)
#endif

定义 CURRENT_MODULE仅在包含定义的模块中定义,因此在编译该模块时会导出该方法。包含标题的所有其他模块都没有 CURRENT_MODULE定义和函数将被导入。

我猜你的指令 - _declspecimport - 与此类似。

关于visual-c++ - C2491 : 'std::numpunct<_Elem>::id' : definition of dllimport static data member not allowed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8401359/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com