【问题标题】:a value of type "const char *" cannot be assigned to an entity of type "char" C OOP“const char *”类型的值不能分配给“char”类型的实体 C OOP
【发布时间】:2013-11-29 22:11:50
【问题描述】:

我正在创建一个类来计算 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++ oop


    【解决方案1】:

    C++ 有两种由字符组成的常量——字符串字面量和字符字面量。

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

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

    grade ='A';
    

    【讨论】:

      【解决方案2】:

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

      char(带符号)是一种能够在编译器的默认字符集中存储字符表示的类型。在现代的西方 PC 上,这意味着 ASCII,它是一个需要 7 位的字符集,加上一个用于符号。所以,char 一般是一个 8 位的值或字节。

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

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

      你想要

      grade = 'A';
      

      【讨论】:

        【解决方案3】:

        替换

        grade = "A";
        

        grade = 'A';
        

        您只能将 char 分配给 char,不能将 string 分配给单个 char,这就是您正在尝试做的事情。

        【讨论】:

          【解决方案4】:

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

          您不能将const char* 分配给char 变量。

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

          要解决这个问题,请替换:

          等级="A"

          等级='A'。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-04-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-07-23
            • 1970-01-01
            • 2019-08-25
            • 1970-01-01
            相关资源
            最近更新 更多