Tôi có mã được biên dịch một cách vui vẻ với phiên bản g ++ 3.something. Sau đó tôi muốn xây dựng một số mã khác có biểu tượng C++ 11 trong đó vì vậy tôi đã nâng cấp lên g ++ 4.7. Bây giờ mã ban đầu của tôi không xây dựng. Tôi nhận được lỗi:Lỗi "'fdopen' không được khai báo" được tìm thấy với g ++ 4 được biên soạn với g ++ 3
'fdopen' đã không được khai báo trong phạm vi này
Theo trang man, fdopen() được khai báo trong stdio.h mà tôi đang kể. Tôi không chắc nó có liên quan, nhưng tôi đang làm việc trong môi trường Cygwin. Phiên bản chính xác của g ++ tôi đang sử dụng là phiên bản 4.7.2 do Cygwin cung cấp.
Tôi chưa thay đổi mã này kể từ khi tôi chuyển trình biên dịch và tôi chắc chắn có thể xác nhận rằng nó được xây dựng và mã thử nghiệm của tôi chạy và được chuyển với trình biên dịch trước đó.
Theo yêu cầu, mã ví dụ để chứng minh vấn đề:
#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
Nếu không nhìn thấy một số mã, thật khó để biết chắc chắn, nếu bạn có thể ngưng tụ nó xuống một mẫu nhỏ vẫn cho thấy sự cố có thể hữu ích. –
Đã thêm mã. Tôi đã viết nó từ đầu. Lời xin lỗi của tôi, tôi nghĩ rằng từ mô tả vấn đề, mã trên có thể được giả định, nếu cần thiết. Về cơ bản fdopen được khai báo trong theo trang người đàn ông và biên dịch với g ++ 3 chức năng được tìm thấy và với g ++ 4 nó không phải là. Vì vậy, chỉ cần đặt fdopen() trong một số mã và biên dịch để có được cùng một vấn đề. –
AlastairG