【问题标题】:How to resolve error C2664 _vswprintf_c_l error in visual studio 2005?如何解决 Visual Studio 2005 中的错误 C2664 _vswprintf_c_l 错误?
【发布时间】:2011-07-13 11:23:07
【问题描述】:

显示的错误:

Error   11  error C2664: '_vswprintf_c_l' : cannot convert parameter 4 from 'void *' to '_locale_t' C:\Program Files\Microsoft Visual Studio 8\VC\include\swprintf.inl  41

它找到文件-C:\Program Files\Microsoft Visual Studio 8\VC\include\swprintf.inl,我猜这是一个系统文件。那么,如何解决呢?

平台:Visual Studio 2005 版本 8.0.50727.762

【问题讨论】:

  • 听起来你忘记传递语言环境参数了。
  • 这是完整的错误信息吗?错误可能在您的代码中。您能否添加发生错误的代码。如果 VS 没有将您指向代码中的特定行,则它必须位于正在编译的文件中,您可以在其中调用 vswprintf 或类似函数。

标签: c visual-studio-2005 compiler-errors c2664


【解决方案1】:

我在处理的代码中也看到了这个问题。 问题是 stdlib.h 被包含在可能包含其他一些 c 或 c++ 头文件的本地头文件之后。

错误的顺序:

#include "someheaderofmine.h"//includes several other headers
#include <stdlib.h>

只是颠倒包含顺序解决了我的问题:

#include <stdlib.h>
#include "someheaderofmine.h"

如果您使用 string.h,似乎会出现同样的问题

【讨论】:

    【解决方案2】:

    在我的例子中,它在 C++ 代码中使用了旧版 C 标头,其中包含 #define NULL ((void *)0) 在某些旧版 C 标头中。我的错误消息是“C2664 ...无法将参数 3 从 void * 转换为 const_locale_t”。有问题的论点是NULL。通常 NULL 在 vcruntime.h(Visual C++ 的一部分)中定义。在任何依赖于 vcruntime.h 的代码(如 string.h、stdio.h)之前使用自定义 NULL 会导致此错误。删除我们的自定义定义或将其更改为以下即可解决问题。

    #ifndef NULL
    #ifdef __cplusplus
    /*C++ NULL definition*/
    #define NULL 0
    #else
    /*C NULL definition*/
    #define NULL ((void *)0)
    #endif
    #endif
    

    【讨论】:

      猜你喜欢
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 2017-03-23
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多