C++错误:从'void*'到'char*'的转换无效

use*_*662 1 c++

我有这个C++代码:

#include <stdlib.h>
int main(){
    char *Teclas;
    Teclas = calloc(1024,sizeof(char));
}
Run Code Online (Sandbox Code Playgroud)

并且编译器发出以下错误:

error: invalid conversion from `void*' to `char*'
Run Code Online (Sandbox Code Playgroud)

这个错误意味着什么,我该如何解决?

Mik*_*our 12

问题是您正在尝试使用C++编译器编译C语言.正如错误消息所示,此行:

Teclas = calloc(1024,sizeof(char));
Run Code Online (Sandbox Code Playgroud)

尝试将无类型转换void*通过返回指针calloc到一个输入char*指针分配给该类型的变量.这种转换在C中有效,但在C++中无效.

解决方案是使用C编译器.看起来你正在使用GCC,所以只需将源文件重命名为something.c,gcc而不是使用g++.

如果你真的必须使用编译器来处理错误的语言,并且不想在惯用的C++中重写它,那么你需要一个强制转换来强制它通过编译器:

Teclas = static_cast<char*>(calloc(1024,sizeof(char)));
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望代码保持有效C:

Teclas = (char*)calloc(1024,sizeof(char));
Run Code Online (Sandbox Code Playgroud)

但是不要那样做:为语言使用正确的编译器.除非这是将程序转换为C++的第一个阶段; 在这种情况下,接下来要做的就是摆脱这些分配并std::string改为使用.

  • @ user2792662,这意味着你最有可能使用GCC. (2认同)