无法编译 ftpupload.c
Can't compile ftpupload.c
我正在尝试使用命令 g++ -o program ftpupload.c
编译 ftpupload.c,但出现以下错误:
ftpupload.c: In function ‘size_t read_callback(char*, size_t, size_t, void*)’:
ftpupload.c:57:50: error: invalid conversion from ‘void*’ to ‘FILE* {aka _IO_FILE*}’ [-fpermissive]
size_t retcode = fread(ptr, size, nmemb, stream);
^
In file included from ftpupload.c:22:0:
/usr/include/stdio.h:646:15: note: initializing argument 4 of ‘size_t fread(void*, size_t, size_t, FILE*)’
extern size_t fread (void *__restrict __ptr, size_t __size,
^~~~~
添加显式转换:
size_t retcode = fread(ptr, size, nmemb, (FILE *)stream);
C++在指针转换方面比C更严格
首先,您尝试使用 C++ 编译器编译 C 文件。所以你必须使用 gcc 命令而不是 g++。编译器报告属于类型转换。流变量必须转换为 FILE*.
这是将 C 源文件编译为 C++。 C++ 在涉及隐式转换时更加严格,并且不允许从 void*
到任何其他指针 (source) 的隐式转换:
Pointer to object of any type can be implicitly converted to pointer to void (optionally cv-qualified); the pointer value is unchanged. The reverse conversion, which requires static_cast or explicit cast, yields the original pointer value: [..]
要解决此问题,请使用 C 编译器或添加强制转换:
size_t retcode = fread(ptr, size, nmemb, static_cast<FILE*>(stream));
不推荐,但如果此行需要双语 C 和 C++,您可以使用 C 风格的转换:
size_t retcode = fread(ptr, size, nmemb, (FILE*) stream);
附带说明:ftpupload.c
不包含独立程序,即使使用转换也不会完全编译。最佳解决方案取决于您首先要编译此文件的原因。
我正在尝试使用命令 g++ -o program ftpupload.c
编译 ftpupload.c,但出现以下错误:
ftpupload.c: In function ‘size_t read_callback(char*, size_t, size_t, void*)’:
ftpupload.c:57:50: error: invalid conversion from ‘void*’ to ‘FILE* {aka _IO_FILE*}’ [-fpermissive]
size_t retcode = fread(ptr, size, nmemb, stream);
^
In file included from ftpupload.c:22:0:
/usr/include/stdio.h:646:15: note: initializing argument 4 of ‘size_t fread(void*, size_t, size_t, FILE*)’
extern size_t fread (void *__restrict __ptr, size_t __size,
^~~~~
添加显式转换:
size_t retcode = fread(ptr, size, nmemb, (FILE *)stream);
C++在指针转换方面比C更严格
首先,您尝试使用 C++ 编译器编译 C 文件。所以你必须使用 gcc 命令而不是 g++。编译器报告属于类型转换。流变量必须转换为 FILE*.
这是将 C 源文件编译为 C++。 C++ 在涉及隐式转换时更加严格,并且不允许从 void*
到任何其他指针 (source) 的隐式转换:
Pointer to object of any type can be implicitly converted to pointer to void (optionally cv-qualified); the pointer value is unchanged. The reverse conversion, which requires static_cast or explicit cast, yields the original pointer value: [..]
要解决此问题,请使用 C 编译器或添加强制转换:
size_t retcode = fread(ptr, size, nmemb, static_cast<FILE*>(stream));
不推荐,但如果此行需要双语 C 和 C++,您可以使用 C 风格的转换:
size_t retcode = fread(ptr, size, nmemb, (FILE*) stream);
附带说明:ftpupload.c
不包含独立程序,即使使用转换也不会完全编译。最佳解决方案取决于您首先要编译此文件的原因。