2010-03-02 9 views
13

Lors de la compilation du code de travail sur Fedora 11, je reçois cette erreur:va_list n'a pas été déclaré

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

J'utilise:

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

Est-ce que quelqu'un sait ce que le problème pourrait être?

+1

Nous avons une balise 'télépathe-needed'? – Maulrus

+1

@Maulrus: Non plus nous ne le faisons pas. (Il serait implicite dans presque chaque question à faible score demandé si nous l'avons eu pour de vrai ...) –

+0

Salut David J'ai rencontré le même problème sur Ubuntu 9.10. Utilisation de GCC 4.4.1 Avez-vous résolu cela? Si oui, aidez-moi s'il vous plaît. Merci Vinit –

Répondre

3

L'introduction de la macro varadic définie dans g ++ 4.4 a une sémantique confuse et torsadée. Vous pourriez avoir une meilleure idée de ce qui ne se passe pas en utilisant g++ -E broken_code.cpp et en regardant ce que le pré-processeur apporte. Il y a quelques douzaines de directives du préprocesseur GNU C qui pourraient empêcher la déclaration ::va_list de se compiler comme __gnuc_va_list qui est elle-même de saisissez __builtin_va_list

le code indésirable:

$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 

et des liens (compiles avec des avertissements) avec la sortie correspondante de g++ -E junk.cpp être:

# 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

J'ai eu le même message d'erreur et je résolu, y compris l'un des fichiers suivants

#include <stdarg.h> 

ou

#include <cstdarg>