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)
問題が何であるかを知っている人はいますか?
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)
問題が何であるかを知っている人はいますか?
同じエラーメッセージが表示され、次のファイルのいずれかを含めて解決しました
#include <stdarg.h>
また
#include <cstdarg>
g++ 4.4 で varadic マクロ セットを導入すると、セマンティクスが混乱し、ねじれます。g++ -E broken_code.cpp
プリプロセッサが何を持ち込んでいるのかを使用して調べることで、何が起こっていないのかをよりよく理解できるかもしれません。それ自体が型である::va_list
として宣言がコンパイルされるのを防ぐ可能性のある GNU C プリプロセッサ ディレクティブが数十個あります。__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;
}