ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
时间: 2024-02-25 21:59:17 浏览: 319
这个错误是因为在使用字符串常量 "abc" 和 "bdc" 时,将其直接赋值给了 char* 类型的 name 变量,这是不被允许的。在 C++ 中,字符串常量是 const char* 类型的,因此将其直接赋值给 char* 类型的变量会导致编译器报错。
要解决这个问题,可以将 char* 类型的 name 变量改为 const char* 类型,或者使用 strcpy 函数将字符串常量复制到动态分配的内存中。例如,可以将 namelist 类的构造函数修改为:
```
namelist(const char *p) {
name = new char[strlen(p) + 1];
if (name != nullptr) {
strcpy(name, p);
}
}
```
同时,在主函数中创建对象时也需要使用 const char* 类型的字符串常量,例如:
```
namelist n1("abc"), n2("bdc");
```
这样就可以避免这个错误了。
相关问题
iso c++ forbids converting a string constant to 'char*' [-wwrite-strings]
这个错误信息是因为在 C++ 中,字符串常量(例如 "hello")默认是 const char* 类型,不能直接赋值给 char* 类型的变量。因为字符串常量是只读的,如果将其赋值给 char* 类型的变量,就可以通过这个变量修改字符串常量的内容,这是不被允许的。
解决这个问题的方法是将变量的类型改为 const char*,或者使用 strcpy() 函数将字符串常量的值复制到 char* 类型的变量中。
iso c++ forbids converting a string constant to ‘char*’ [-wwrite-strings]
这个错误信息的意思是ISO C++不允许将字符串常量转换为'char *',即不允许将一个字符串常量赋值给一个非常量的字符指针。这是因为字符串常量是只读的,而非常量的字符指针可以修改其指向的内存。为了避免这个错误,可以将字符指针声明为常量,或者使用const char *来表示字符串常量。
阅读全文