我有这个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改为使用.