g ++バージョン3.somethingでうれしくコンパイルされたコードがあります。私はそれから、g ++ 4.7にアップグレードしたので、C++ 11のシンボルを持つ他のコードをビルドしたかったのです。今私の元のコードは構築されません。エラー "'fdopen'が宣言されていませんでしたg ++ 3でコンパイルされたg ++ 4で見つかりました
が「fdopenを」(fdopenをmanページによると、このスコープ
で宣言されていなかった)私は含めていstdio.hで宣言されている:私はエラーを取得します。私はそれが適切であるかどうかはわかりませんが、私はCygwin環境で作業しています。 g ++の正確なバージョンは、Cygwinが提供するバージョン4.7.2です。
私はコンパイラを切り替えてからこのコードを変更していないので、それがビルドされ、テストコードが実行され、以前のコンパイラに渡されたことを確かめることができます。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char **argv)
{
int fd;
FILE *fp;
fd = open("test.txt", (O_WRONLY | O_CREAT | O_EXCL), S_IRWXU);
if(0 < fd)
{
fp = fdopen(fd, "wb");
fprintf(fp, "Testing...\n");
fclose(fp);
}
return 0;
}
# g++ -std=c++11 -o test test.cpp
test.cpp: In function 'int main(int, char**)':
test.cpp:14:29: error: 'fdopen' was not declared in this scope
いくつかのコードを見ることなく、確かに知るのは難しいですが、まだ助けとなる問題を示している小さなサンプルに凝縮することができます。 –
コードが追加されました。私は最初から書きました。私の謝罪、問題の説明から、必要に応じて上記のコードが仮定できると思いました。基本的にfdopenはマニュアルページに従ってに宣言されており、g ++ 3でコンパイルするとその関数が見つかり、g ++ 4ではありません。だから、ちょうどfdopen()をいくつかのコードに入れてコンパイルすると、同じ問題が発生します。 –
AlastairG