Win CE 7 平台上的错误 c2039 和错误 c2873
Posted
技术标签:
【中文标题】Win CE 7 平台上的错误 c2039 和错误 c2873【英文标题】:error c2039 and error c2873 on Win CE 7 platform 【发布时间】:2016-04-28 15:29:50 【问题描述】:代码可以在 Win32 平台上正确编译,但在 WinCe 平台上会导致在 Debug 模式下出现很多错误。这些错误与头文件 cstdio、cstring 和 cwchar 有关。
Microsoft Visual Studio 9.0\VC\ce\include\cstdio(82) :error C2039: '_gets_instead_use_StringCbGetsA_or_StringCchGetsA' : is not a member of '`global namespace''
错误 C2873:“_gets_instead_use_StringCbGetsA_or_StringCchGetsA”:符号不能在 using 声明中使用
错误 C2873:“sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA”:符号不能在 using 声明中使用
ce7\include\cwchar(66):错误 C2873:'swprintf_instead_use_StringCbPrintfW_or_StringCchPrintfW':符号不能在 using 声明中使用
\include\armv4i\stdlib.h(146) : 错误 C2065: '_malloca' : 未声明的标识符
【问题讨论】:
【参考方案1】:A 后缀通常连接到具有 8 位和 16 位 unicode 版本的函数的 ASCII 版本(后者通常以 W 作为后缀)。 Windows CE 本机仅支持 unicode,因此如果您尝试构建使用 ASCII 的代码,您可能会遇到问题。标准 C/C++ 库中有 ASCII 函数的部分实现,涵盖了最常用的函数和对象,但您引用的那些可能不存在。 您可以尝试定义 UNICODE 和 _UNICODE 来构建该代码的“W”版本,希望它的任何部分都没有假设 1 个字符=1 个字节。
【讨论】:
感谢@Valter Minute。但似乎我正在使用那些适用于 win32 但不适用于 wince 的 C 运行时库的功能。我在调试模式下收到上述错误。当我更改为发布模式时,我在 cstdio 头文件中收到以下错误。 1>c:\Program Files\Microsoft Visual Studio 9.0\VC\ce\include\cstdio(64) : 错误 C2143: 语法错误: 在 ':' 之前缺少 '' 是否与命名空间有关。 #if _GLOBAL_USING _STD_BEGIN 使用 ::_Filet; 设置 UNICODE 是否也会失败? 是的,我在项目的预处理器定义中包含了 UNICODE 集。但这没有帮助。【参考方案2】:我所做的只是更改包含文件的顺序。我将“winsock2.h”头文件放在其他头文件之后。现在我没有得到这些错误。
Before I had:
#include < winsock2.h >
#include < vector >
#include < map >
#include < string >
After:
#include < vector >
#include < map >
#include < string >
#include < winsock2.h >
【讨论】:
以上是关于Win CE 7 平台上的错误 c2039 和错误 c2873的主要内容,如果未能解决你的问题,请参考以下文章
错误4error C2039: “Sleep”: 不是“boost::this_thread”的成员
错误:C2039:“指针”:不是“QJsonObject::iterator”的成员