错误:从“常量字符*”到“字符”[-允许]的转换无效
error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]
#include<stdio.h>
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
class base {
public:
int lookup(char c);
}; // class base
int base::lookup(char c)
{
cout << c << endl;
} // base::lookup
int main() {
base b;
char c = "i";
b.lookup(c);
} // main
在编译上面的代码时,我得到以下错误:
g++ -c test.cpp test.cpp: 在函数 'int main()' 中: test.cpp:20:10: 错误:从"常量字符*"到"字符"的转换无效 [-允许]
尝试替换
char c = "i";
跟
char c = 'i';
"i"
不是一个字符,它是一个字符数组,基本上衰减到指向第一个元素的指针。
你几乎肯定想要'i'
.
或者,您可能实际上希望基于多个字符进行查找,在这种情况下,您应该使用 "i"
但在这种情况下,无论是在定义c
还是在 base::lookup()
方法中,类型都是const char *
而不仅仅是char
。
但是,如果是这种情况,我会认真考虑使用 C++ std::string
类型而不是 const char *
。这可能不是必需的,但使用C++字符串可能会使您的生活更轻松,具体取决于您要操作实际值的程度。
"i"
是一个字符串文字,你可能想要一个字符文字:'i'
。
字符串文本是以 null 结尾的 const char
数组(在该表达式中使用时隐式转换为 char const*
,因此会出现错误)。
字符文字只是char
s
相关文章:
- 如果字符串在 C/C++ 中没有 NUL 字符(以防编译器允许它通过)会发生什么情况?
- 为什么C++中不允许连接两个常量字符*?
- C 17是否允许非ASCII字符作为标识符
- C++20 中的严格别名规则是否允许标准 c++ unicode 字符和下划线类型之间"reinterpret
- ISO C++11 不允许从字符串转换为字符
- 从"常量字符*"到"字符*"[-允许]的转换无效;VTK-7.1.1 编译错误
- 用于检查 char 数组是否仅包含允许的字符的函数
- 是否有任何法律语法允许引号出现在 javascript 中的标识符字符旁边?(如"so")
- C 字符初始化允许多个字符
- 何时以及如何允许转换为字符指针
- 常量字符 * 允许更改字符值,为什么
- 允许将 T* 与字符*混叠.是否也允许反过来
- 是否允许将字符 [] 转换为无符号字符 *
- 错误:从“常量字符*”到“字符”[-允许]的转换无效
- 为什么C++允许我将常量字符分配给常量字符 *?
- 不允许从"常量无符号字符*常量*"到"常量字符*常量*"static_cast
- 如何验证字符串是否为数字和/或允许一个字符"."
- 从C++字符串中删除不允许使用的字符的最优雅、最有效的方法
- 从“常量字符*”到“字符*”[-允许]的转换无效
- 查找字符串是否包含c++中的字符(允许增强)