C++中的C代码不兼容参数错误
C code in C++ incompatible parameter error
在C中,这部分代码运行良好,但在C++中,我得到了一个错误:
类型为"void*"的参数与类型为"FILE"的参数不兼容*"
我该怎么修?这是代码的相关部分:
static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
{
curl_off_t nread;
size_t retcode = fread(ptr, size, nmemb, stream); /*i get an error on this line on stream */
nread = (curl_off_t)retcode;
fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T
" bytes from filen", nread);
return retcode;
}
事实上,解决方案最终很简单。因此,如果它对任何人都有帮助,我只需用FILE*ptr和FILE*流更改void*,它就可以使用
size_t retcode = fread((FILE*)ptr, size, nmemb, stream); /*i get an error on this line on stream */
这是一个快速而肮脏的答案。我的问题是,如果ptr总是指向FILE
的指针,那么为什么要将参数声明为void*?
空指针:C和C++之间的差异有你们可能想要的所有解释。我已经把这个问题标记为重复问题,但我想让你在短期内度过难关。
C允许void*
和其他类型的指针之间的自动转换:
6.3.2.3指针
1指向void的指针可以转换为指向任何对象类型的指针,也可以从指向任何对象的指针转换。指向任何对象类型的指针都可以转换为指向void并返回的指针;结果应与原始指针进行比较。
因此,在对期望FILE*
的函数的调用中使用ptr
是可以的。
C++允许从其他类型的指针到void*
的自动转换,但不允许从void*
到其他类型的指示器的自动转换。
因此,您会得到编译器错误。
相关文章:
- C++声明模板参数阴影模板参数错误
- 为什么 CRTP 模板C++给出无效参数错误?
- (C/C++)fscanf_s从txt文件以字符形式读取数组时缺少整数参数错误
- 参数错误可能与类型不匹配有关?
- printf 和 strftime 的参数错误无效
- 如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
- 如何修复"没有重载函数需要 2 个参数"错误C++
- 术语不计算为函数采用 1 个参数错误?
- 从带有 getline() 的文件读入一行上有多个信息得到无效参数错误
- 为什么我不能像使用 std::string::size_type 那样使用 QList::size_type?(模板参数错误)
- cudaFreeHost() 无效参数错误
- 精神语法不会编译:函数模板参数错误?
- C 功能具有参考参数错误的迭代器错误.寻求解释
- 使用getDefaultCommConfig使用无效的参数错误
- C++ 可变参数模板和模板模板参数:错误:模板参数列表中参数 1 处的类型/值不匹配
- 使用SWIG生成的Python库时,向量分配器参数错误
- 错误C2664:无法转换参数错误
- C 作为参数错误的功能
- 命令行参数错误
- 增强Python参数错误