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”的成员

错误 C2039:“会话”:不是“pjsua_call”的成员

错误 C2039:“查找”:不是“标准”的成员

错误 C2039:“向量”:不是“标准”的成员

Visual Studio 2008,错误 c2039:“set_new_handler”:不是“std”的成员