2012-02-16 51 views
1

这里有几个问题。首先,包括cstdarg引发此错误:XCode 4.2.1 - 来自SFML 2.0的va_list,va_start,va_end的问题

/usr/include/c++/4.2.1/cstdarg:59:11:{60:9-60:11}: error: no member named 'va_list' in the global namespace [3] 
    using ::va_list; 

然后,包括C++ locale.h文件抛出这个:

/usr/include/c++/4.2.1/bits/c++locale.h:76:5: error: use of undeclared identifier 'va_start' [3] 
    va_start(__args, __fmt); 
    ^
/usr/include/c++/4.2.1/bits/c++locale.h:84:5: error: use of undeclared identifier 'va_end' [3] 
    va_end(__args); 
    ^
/usr/include/c++/4.2.1/cstdarg:54:20: note: instantiated from: 
#define va_end(ap) va_end (ap) 

我不知道该怎么做这件事。我使用的是SFML 2.0,并且包含Graphics.hpp会导致这些错误。任何想法如何解决这一问题?

回答

1

Plain C头文件与C++头文件不兼容。尝试包括cstdarg代替stdarg.h

+0

谢谢,这虽然会产生同样的错误。它看起来像XCode自动调用cstdarg,如果你包含stdarg.h – bitrayne 2012-02-16 21:40:06

+0

没办法。首先,它不是Xcode,它是C预处理器。其次,它将因此包括你所要求的。 – 2012-02-16 21:43:01

+0

我明白了,这很有趣,它正在发生 – bitrayne 2012-02-16 21:52:44

1

我曾在一个项目这个问题,通过增加一个额外的固定它包括在该负责加载中缺少的元素开始:

#include <stdio.h> 

如果你在看文件,你看到的定义:

#ifndef _VA_LIST 
#define _VA_LIST 
/* DO NOT REMOVE THIS COMMENT: fixincludes needs to see: 
* __gnuc_va_list and include <stdarg.h> */ 
typedef __darwin_va_list va_list; 
#endif 
3

我碰到了同样的问题。我发现在我的标题搜索路径中同时使用/usr/local/include/**/usr/include/**可以打破所有标准模板库。我使用的一个库安装了自己的/usr/lib/usr/include,我发现卸载这个库并重新安装到/usr/local/lib/usr/local/include解决了这个问题。

我试过,包括stdio.h如上建议,但它没有帮助。

我使用的系统是否为Mac OS 10.8和4.3的XCode