不能将 "const char *" 类型的值分配给类型 "char" C OOP 的实体

a value of type "const char *" cannot be assigned to an entity of type "char" C OOP

本文关键字:char 类型 OOP 实体 分配 不能 const      更新时间:2023-10-16

我正在创建一个类来计算C++中用户的分数,我遇到了一个简单但令人讨厌的问题。我知道错误意味着什么,但我不知道如何修复它,更改为字符串实际上修复了问题,但这不是我想做的。

以下是错误:const char*"无法分配给"char 类型的实体

代码

    #include <string>
using namespace std;
class Gradecalc
{
public:
    Gradecalc()
    {
        mark = 0;
    }
    int getmark()
    {
        return mark;
    }
    void setmark(int inmark)
    {
        mark = inmark;
    }
    void calcgrade()
    {
        if (mark >=70)
        {
            grade = "A";      //**ERROR IS HERE**
        }
    }
    char getgrade()
    {
        return grade;
    }
private:
    int mark;
    char grade; //VARIABLE IS DECLARED HERE
};

C++有两种类型的常量,它们由字符组成——字符串文字和字符文字。

  • 字符串文字用双引号括起来,类型为const char *
  • 字符文字用单引号括起来,类型为char

字符串文字允许多个字符;字符文字只允许使用一个字符。这两种类型的文字不兼容:您需要为赋值的左侧提供兼容类型的变量或常量。由于您将grade声明为char,因此需要更改代码以使用字符文字,如下所示:

grade ='A';

C和C++使用双引号表示"字符串文字",这与"字符文字"非常不同。

char(带符号)是一种能够在编译器的默认字符集中存储字符表示的类型。在现代西方电脑上,这意味着ASCII,这是一个需要7位加1的符号的字符集。因此,char通常是一个8位值或字节。

字符文字是使用单引号形成的,因此'A'的计算结果为ASCII代码65。('A' == 65)。

另一方面,"A"使编译器将char(65)+char(0)写入输出程序的一部分,然后将表达式"A"求值为该序列的地址;因此,它计算为指向char序列的指针,但它们在程序数据本身中,因此不可修改,因此为const char*

你想要

grade = 'A';

更换

grade = "A";

通过

grade = 'A';

您只能将字符分配给字符,不能将字符串分配给单个字符,这就是您要做的

Gradechar变量,"A"const char*类型。

不能将const char*分配到char变量中。

双引号表示const char*,单引号表示char。

要解决此问题,请替换:

grade="A"

带有

等级="A"。

相关文章: