2010-03-02 8 views
13

Khi biên dịch một số mã làm việc trên Fedora 11, tôi nhận được lỗi này:va_list chưa được công bố

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

Tôi đang sử dụng:

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

Có ai biết những gì các vấn đề có thể được?

+1

Chúng tôi có một 'tag Telepath-needed'? – Maulrus

+1

@Maulrus: Không còn gì nữa. (Nó sẽ được ngầm định trong hầu hết mọi câu hỏi có điểm thấp được hỏi nếu chúng tôi có nó ...) –

+0

Hi David Tôi đã gặp vấn đề tương tự trên Ubuntu 9.10. Sử dụng GCC 4.4.1 Bạn đã giải quyết vấn đề này chưa? Nếu có, hãy giúp tôi. Cảm ơn Vinit –

Trả lời

3

Đưa vào tập macro đa biến trong g ++ 4.4 có ngữ nghĩa khó hiểu và xoắn. Bạn có thể có được một ý tưởng tốt hơn về những gì không xảy ra bằng cách sử dụng g++ -E broken_code.cpp và xem những gì bộ xử lý trước được đưa vào. Có một vài chục chỉ thị tiền xử lý GNU C có thể ngăn chặn khai báo ::va_list từ biên dịch là __gnuc_va_list. gõ __builtin_va_list

mã rác:

$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 

biên dịch và liên kết (với cảnh báo) với sản lượng có liên quan của g++ -E junk.cpp phúc:

# 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

tôi đã được thông báo lỗi tương tự và tôi giải quyết bao gồm một trong các tập tin tiếp theo

#include <stdarg.h> 

hoặc

#include <cstdarg>