从“const char *”到“char”错误的转换无效

时间:2011-11-16 20:53:06

标签: c++

我想发布这个,因为我不确定我在一个简单的赋值语句中遇到了什么问题。我正在做一个家庭作业,要求我在一个简单的程序中编写结构和函数来绘制ASCII字符的形状。现在我只是想测试我编写的函数,我试图为Circle结构的符号元素赋值,只是为了测试我写的DrawShape函数。当我尝试为它分配一个* char时,我收到一条错误消息“错误:从'const char *'无效转换为'char'”。我会将整个代码放入其中,尽管它很长且未完成。任何帮助都将不胜感激。我得到的问题恰好在主题“circle1.char ='*'”

的开头
#include <iostream>
#include <math.h>
#include <cstdlib>
using namespace std;

const int NUMBER_OF_ROWS = 26;
const int NUMBER_OF_COLUMNS = 81;
char drawSpace[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS];

struct Point{
    int x;
    int y;
};

struct Circle{
    Point center;
    int radius;
    char symbol;
    bool buffer[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS];
};

bool setCircleRadius(Circle &b, int r);
bool setCircleCenter(Circle &b, int x, int y);
bool moveCircle(Circle &b, int x, int y);
void drawCircle (Circle b);
void lineChars(Line a);
void circleChars(Circle b);
void drawShapes();

int main() {
    Circle circle1;
    circle1.radius = 5;
    circle1.symbol = "*";
    circle1.center.x = 40;
    circle1.center.y = 10;

    drawCircle(circle1);

    return 0;
}

7 个答案:

答案 0 :(得分:21)

您应该使用单引号作为字符。双引号表示您正在使用(可能是单字符)字符串文字,表示为const char *(指向常量字符的指针)。

正确的语法:circle1.symbol = '*';

答案 1 :(得分:5)

问题在于:

circle1.symbol = "*";

circle1.symbol定义为char,但您为其指定了一个字符串(一组字符)。你需要做的是

circle1.symbol = '*';

答案 2 :(得分:1)

您对Circle的定义表明symbolchar,但您尝试为其分配char[2]类型的字符串文字:

circle1.symbol = "*";

相反,您应该为其分配char

circle1.symbol = '*';

答案 3 :(得分:1)

你有:

circle1.symbol = "*";

你需要:

circle1.symbol = '*';

答案 4 :(得分:0)

在C ++中,单个字符不是用双引号编写的,而是使用单引号,即'*',而不是"*"。实际上“*”是两个字符的数组,第一个是'*',第二个是'\0'来标记字符串的结尾。

答案 5 :(得分:0)

&#34;符号&#34; Circle结构的成员被定义为单个char。虽然看起来你正在分配一个字符,但实际上你正在分配长度为1的字符串或字符*。差异:char a =&#39; a&#39 ;; char * a =&#34; a&#34 ;;它全部在引号中。

答案 6 :(得分:0)

您的错误位于第circle1.symbol = "*";行。 "*"const char * symbol(您的结构)是char 尝试:circle1.symbol = '*';