"const char *" 类型的实参与 "char *" 类型的形参不兼容 47
时间: 2023-10-30 07:06:13 浏览: 223
这个错误是因为 C++ 中有一个重要的概念叫做 const-correctness,即 const 正确性。在函数参数传递中,如果函数定义的参数是 `char *` 类型,而实际传递的参数是 `const char *` 类型,会导致这个错误。
`char *` 表示指向一个字符数组的指针,可以修改字符数组中的内容。而 `const char *` 表示指向一个常量字符数组的指针,不能修改字符数组中的内容。
例如,下面的代码就会触发这个错误:
```c++
void func(char *str) {
// do something
}
int main() {
const char *str = "hello";
func(str);
return 0;
}
```
因为 `func` 函数定义的参数是 `char *` 类型,而传递给它的参数是 `const char *` 类型。为了解决这个问题,我们可以将函数定义中的参数类型改为 `const char *`,或者将实参的类型转换为 `char *`。例如:
```c++
void func(const char *str) {
// do something
}
int main() {
const char *str = "hello";
func(str);
return 0;
}
```
或者:
```c++
void func(char *str) {
// do something
}
int main() {
const char *str = "hello";
func(const_cast<char *>(str));
return 0;
}
```
其中,`const_cast` 是 C++ 中的一个运算符,用于将 const 类型转换为非 const 类型。但是需要注意的是,使用 `const_cast` 转换掉 const 属性后,如果在函数中修改了这个字符串的内容,会导致未定义行为。因此,建议还是在函数定义时将参数类型改为 `const char *`。
阅读全文