1

显示的错误:

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

4

2 回答 2

3

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

顺序错误:

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

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

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

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

于 2012-01-31T13:24:18.223 回答
2

在我的例子中,它在 C++ 代码中使用了一个包含#define NULL ((void *)0)的旧版 C 标头,其中包含一些旧版 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
于 2019-08-28T07:51:50.893 回答