C和C++上的无效转换错误
Invalid conversion error over C and C++
这是我的代码。
struct MemoryStruct {
char *memory;
size_t size;
};
struct MemoryStruct *mem = &state->characters;
mem->memory = realloc(mem->memory, mem->size + len + 1);
当我用"C"运行这段代码并用gcc编译它时,我没有得到任何错误。
但同样的代码,我在C++中运行,并用g++编译,我在中遇到了错误
错误:从"void*"到"char*"的转换无效[-fpermission]
为什么它在C++中给出了错误,而在C 中没有给出错误
为什么它在C++中给出了错误,而在C 中没有给出错误
因为这些语言的规则是不同的。在这种特殊情况下,不同之处在于C++不允许从void*
到char*
的转换,而C允许。这就是编译器错误告诉你的。
C++给出了一个错误,因为没有从void*到char*的隐式转换(至少在最近的编译器中是这样)。
如果你想用C++编译这些代码,你必须转换成正确的类型:
mem->memory = static_cast<char*>(realloc(mem->memory, mem->size + len + 1));
或者,如果你想保持C兼容性:
mem->memory = (char*)realloc(mem->memory, mem->size + len + 1);
但是,如果您切换到C++,最好使用C++对象,如std::vector
,它将为您执行realloc。
在C++中,您需要强制转换malloc
和友元返回的值:
mem->memory = (char*)realloc(mem->memory, mem->size + len + 1);
简单的是,C和C++都是不同的语言C启发结构,然而C++启发结构以及面向对象的范例在您的情况下C能够将void*转换为char*内置属性,但C++没有这种类型的属性,C++无法将void'转换为char',因此编译器会抛出错误。
相关文章:
- C++ PTHREADS - 无效转换无效*(*)()到无效*(*)(无效*)
- is_same和variadic模板编译时错误无效转换
- 如何将常量无效*转换为istream?
- 无效* 转换获得意外输出
- 无法确定为什么函数调用中从 char* 到 char 的无效转换
- 在这个简单函数中从'char'到'const char*'的无效转换
- C++从 'const char*' 到 'char*' Arduino Uno 的无效转换
- 如何修复C++中的"错误:从'int'到'const char*'[-fallowive]的无效转换?
- C 错误:从(基类模板)到子类的无效转换
- 如何将常量无效*转换为无符号字符*
- 函数模板中的无效转换错误,返回值取决于其泛型类型
- 常量正确性编译错误到模板函数中的无效转换错误
- 从"char"到"const char*"的无效转换[-fpermissive](idk why)
- 从“ void*”到“ pthread_t*”的无效转换
- 当函数调用时,试图阻止数组更改时发生无效转换错误
- 使用基类中定义的函数返回指向派生类实例的指针时发生无效转换错误
- C++从字符到常量字符*的无效转换
- ALL_OF从'char'到'const char*'的无效转换 [-允许]
- C和C++上的无效转换错误
- C++ 在模板专用化中从 strcmp() 中的 'char' 到 'const char*' 的无效转换