C++中的C代码不兼容参数错误



在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*到其他类型的指示器的自动转换。

因此,您会得到编译器错误。

最新更新