2010-03-02 3 views
13

erklärt Wenn auf Fedora einige Arbeits Code kompilieren 11, ich diesen Fehler:va_list wurde nicht

/usr/include/c++/4.4.1/cstdarg:56: error: ‘::va_list’ has not been declared 

Ich verwende:

[[email protected] VTK]$ g++ --version 
g++ (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2) 

Weiß jemand, was das Problem sein könnte?

+1

Wir haben einen 'Telepath-needed'-Tag? – Maulrus

+1

@Maulrus: Nicht mehr wir nicht. (Es wäre implizit in fast jeder Low-Scoring-Frage gefragt, ob wir es wirklich hatten ...) –

+0

Hallo David Ich stieß auf das gleiche Problem auf Ubuntu 9.10. Mit GCC 4.4.1 Haben Sie das Problem gelöst? Wenn ja, bitte hilf mir. Dank Vinit –

Antwort

3

Das Eintragen des Varadic-Makrosatzes in g ++ 4.4 hat eine verwirrende und verdrehte Semantik. Sie können eine bessere Vorstellung davon bekommen, was nicht passiert, indem Sie g++ -E broken_code.cpp verwenden und schauen, was der Preprozessor einbringt. Es gibt ein paar Dutzend GNU C-Präprozessor-Direktiven, die verhindern könnten, dass die Deklaration als __gnuc_va_list kompiliert wird Typ __builtin_va_list

der Junk-Code:

$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 

Kompilierungen und Links (mit Warnungen) mit dem entsprechenden Ausgang der g++ -E junk.cpp infrage kommen:

# 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; 

} 
31

hatte ich die gleiche Fehlermeldung und ich gelöst mit einem der nächsten Dateien

#include <stdarg.h> 

oder

#include <cstdarg>