web-dev-qa-db-ja.com

va_listは宣言されていません

Fedora 11でいくつかの作業コードをコンパイルすると、次のエラーが発生します。

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

私は使っている:

[doriad@davedesktop VTK]$ g++ --version
g++ (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2)

誰かが問題が何であるか知っていますか?

16
David Doria

同じエラーメッセージが表示され、次のファイルの1つを含めて解決しました

#include <stdarg.h>

または

#include <cstdarg>
35

G ++ 4.4で設定されたvaradicマクロを取り込むと、混乱し、ねじれたセマンティクスが発生します。 _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;

}
_
3
msw