gpt4 book ai didi

c++ - 在 VC++14 中使用 std::basic_stringstream 时出错

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:44 28 4
gpt4 key购买 nike

我正在尝试做一些基本的 char16_t 字符串 (u16string) 处理,但遇到了一些麻烦。这个小程序:

#include <string>
#include <sstream>

int main()
{
int foo = 65;

std::basic_stringstream<char16_t> ss;
ss << foo;

std::u16string s = ss.str();
}

创建错误:

Error   C2491   'std::numpunct<_Elem>::id': definition of dllimport static data member not allowed. xlocnum 259

我已经在一些在线编译器上试过了,但是那里没有错误。

感谢我能得到的任何帮助!

最佳答案

好的,它看起来像是 VC++ 标准库或 VC++ 编译器中的错误,甚至可能是两者中的错误。

,第 85 行,在 class numpunct 中声明:

__PURE_APPDOMAIN_GLOBAL _CRTIMP2_PURE static locale::id id; // unique facet id

,第 258/259 行定义:

template<class _Elem>
__PURE_APPDOMAIN_GLOBAL locale::id numpunct<_Elem>::id;

_CRTIMP2_PURE 定义为 _CRTIMP2,后者又定义为 __declspec(dllimport)

现在,根据我对VC++文档的阅读,应该可以了。 __declspec(dllimport) 允许用于静态声明。但是,静态定义 不允许这样做。但是定义没有 __declspec(dllimport),只有声明有。

尽管如此,还是会产生错误:编译器正在查看定义,将其视为 __declspec(dllimport),并产生错误。 p>

我不确定是编译器错误还是库错误的原因是编译器还会发出警告,提示声明和定义不匹配——那个是 __declspec(dllimport) 而另一个则不是。由于根据文档,定义不能是 __declspec(dllimport),这对我来说意味着 既不 声明 也不 定义应该是 __declspec(dllimport)

如果我们看看其他类似的成员,就会证实这种怀疑。例如,num_get::id 不是 _CRTIMP2_PUREnum_put::id 也不是。

所以我认为有两种可能。一是 _CRTIMP2_PURE 有误,应该将其删除。另一个是编译器在声称定义为 __declspec(dllimport) 时发出错误诊断,而实际上它不是。

无论哪种方式,我认为代码示例应该可以编译,这是 Microsoft 需要解决的问题。

关于c++ - 在 VC++14 中使用 std::basic_stringstream<char16_t> 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32002653/

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