Autoturism构造函数报错:无法将const char[6]转为char*,有无除强转外的解法?
C++
Autoturism 构造函数字符串参数转换错误解决方案 报错的根本原因:C++ 中的双引号包裹的字符串字面量属于 const char[N] 类型,其存储在只读内存区域,本身不允许被修改。你当前的 Autoturism 构造函数第一个参数声明为 char *,代表指向可修改的字符内存的指针,因此编译器不允许这二者的隐式转换。你当前使用的 (char*) 强制转换属于不安全的临时方案,如果构造函数内部修改该指针指向的内容,会触发未定义行为(比如程序崩溃)。
可行的安全解决方案如下:
- 方案1:将构造函数参数改为
const char*(最适配现有代码的方案)
如果你确定构造函数内部不需要修改传入的字符串内容,直接修改构造函数的参数声明即可,符合C++的const正确性要求,无需修改调用逻辑:
修改后直接调用// 修改前 Autoturism(char *marca, unsigned int an); // 修改后 Autoturism(const char *marca, unsigned int an);Autoturism obj("Rosie", 2020)即可正常编译。 - 方案2:传入可修改的本地char数组
如果你确实需要在构造函数内部修改传入的字符串内容,不要直接传递字符串字面量,提前创建可修改的本地数组再传递参数:char marca_buf[] = "Rosie"; Autoturism obj(marca_buf, 2020); - 方案3:使用
std::string作为参数类型(现代C++最佳实践)
直接把构造函数的字符串参数替换为C++标准库的字符串类型,无需手动管理内存,也不会出现指针类型转换问题:// 构造函数声明 Autoturism(std::string marca, unsigned int an); // 调用示例 Autoturism obj("Rosie", 2020);
内容的提问来源于stack exchange,提问作者Dragoș-George Gherasim
相关产品推荐
相关产品推荐

