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

时间:2013-11-29 22:11:51

标签: c++ oop

我正在创建一个用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
};

4 个答案:

答案 0 :(得分:9)

C ++有两种类型的常量,包括字符 - 字符串文字和字符文字。

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

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

grade ='A';

答案 1 :(得分:0)

替换

grade = "A";

通过

grade = 'A';

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

答案 2 :(得分:0)

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

您无法将const char*分配到char变量。

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

要解决此问题,请替换:

  

级= “A”

  

级= 'A'。

答案 3 :(得分:0)

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

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

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

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

你想要

grade = 'A';