【问题标题】:error c2039 and error c2873 on Win CE 7 platformWin CE 7 平台上的错误 c2039 和错误 c2873
【发布时间】: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' : 未声明的标识符

【问题讨论】:

    标签: c++ std windows-ce


    【解决方案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 >  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      相关资源
      最近更新 更多