C++--常见错误之char问题
1-啰嗦
学习c++的时候,在构造函数的过程中,定义了char类型的函数。在赋值过程中,反复确认与老师上课的代码相同,报错也在网上可以找到解决办法。但是依旧出错,无法解决。后来发现是char赋值过程中,单双引号的问题。
2-char与单双引号的问题
2.1字符与字符串
字符:一般指单独的字符。单个字母或者符号可以有相对应的ASCII码。
字符串:通常是由多个字符组成。例如:“hello”。
2.2char与string与char*
char:是字符型整型,占用一个字节!通常处理字符。
string:通常处理字符串。
char*:是字符指针类型,当其指向一个字符串的第一个元素时,它就可以表示这个字符串。
2.3单引号与双引号
单引号:通常表示一个整数。例如:‘A’就是会编译成ASCII码对应的数值。
双引号:通常表示字符串。例如:“hello”。
3-char出现的问题
3.1Node.h文件
#ifndef NODE_H
#define NODE_H
class Node
{
public:
Node(char data=0);
char m_cData;//当前的值
bool m_bIsVisited;//标识当前节点是否被访问过
};
#endif
3.2Node.cpp文件
#include"Node.h"
Node::Node(char data)
{
m_cData = data;
m_bIsVisited = false;
}
3.3主程序
#include"Node.h"
#include<stdlib.h>
using namespace std;
int main(void)
{
Node *pNodeA = new Node("A");
}
如果当你new Node("A")
时,会出现一下错误。
3.4报错问题:从“const char [2]”转换为“char”
错误 1 error C2664: “Node::Node(const Node &)”:
无法将参数 1 从“const char [2]”转换为“char”
3.5解决办法
- 最简单的办法就是将
new Node(“A”)
变成new Node(‘A’)。
将你的双引号变成单引号! - 由于我在Node函数中还需要使用
data
并且还会赋值给我的成员函数m_cData
,两个都定义为char类型,赋值确是双引号字符串类型,需要这么解决:将定义使用到的char
都改为char*
#ifndef NODE_H
#define NODE_H
class Node
{
public:
Node(char* data=0);
char* m_cData;//当前的值
bool m_bIsVisited;//标识当前节点是否被访问过
};
#endif
#include"Node.h"
ode::Node(char* data)
{
m_cData = data;
m_bIsVisited = false;
}
4-还有可能出现的char问题
4.1出现的问题
- 从“const char [6]”转换为“char”
- 从“const char [7]”转换为“char”
- 从“const char [8]”转换为“char”
4.2解决办法
大致的解决办法差不多都是将const
添加在char
的前面。
参考:
1、https://blog.csdn.net/ice_ly000/article/details/80557342
2、https://blog.csdn.net/gaoenyang760525/article/details/79588629
3、https://zhidao.baidu.com/question/537800694.html