當在Fedora 11編譯一些工作的代碼,我收到此錯誤:va_list的尚未聲明
/usr/include/c++/4.4.1/cstdarg:56: error: ‘::va_list’ has not been declared
我使用:
[[email protected] VTK]$ g++ --version
g++ (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2)
有誰知道這個問題可能是什麼?
當在Fedora 11編譯一些工作的代碼,我收到此錯誤:va_list的尚未聲明
/usr/include/c++/4.4.1/cstdarg:56: error: ‘::va_list’ has not been declared
我使用:
[[email protected] VTK]$ g++ --version
g++ (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2)
有誰知道這個問題可能是什麼?
引入g ++ 4.4中的變量宏集具有混淆和扭曲的語義。您可以更好地瞭解使用g++ -E broken_code.cpp
時發生的情況,並查看預處理器的功能。有幾十條GNU C預處理器指令可以防止::va_list
聲明編譯爲__gnuc_va_list
,這本身就是鍵入__builtin_va_list
的垃圾代碼:
$cat junk.cpp
#include <cstdarg>
void foo(char *f, ...) { va_list va; va_start(va, va); }
int main(void) { foo("", "", ""); return 0; }
$ g++ junk.cpp
$ g++ --version
g++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1
編譯並用g++ -E junk.cpp
存在的相關的輸出鏈路(有警告):
# 40 "/usr/lib/gcc/i486-linux-gnu/4.4.1/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 102 "/usr/lib/gcc/i486-linux-gnu/4.4.1/include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;
# 45 "/usr/include/c++/4.4/cstdarg" 2 3
# 54 "/usr/include/c++/4.4/cstdarg" 3
namespace std __attribute__ ((__visibility__ ("default"))) {
using ::va_list;
}
我有同樣的錯誤消息,我解決了包括下一個文件
#include <stdarg.h>
或
#include <cstdarg>
我們有一個'心靈感應,needed'標籤之一? – Maulrus 2010-05-19 23:55:24
@Maulrus:再也不是我們了。 (這幾乎隱含在幾乎所有的低分問題中,問我們是否真的有這個問題......) – 2010-05-20 00:39:07
嗨大衛 我在Ubuntu 9.10上遇到了同樣的問題。使用GCC 4.4.1 你解決了嗎?如果是,請幫助我。 謝謝 Vinit – 2011-01-29 19:41:14