2011-11-16 80 views
6

我想发布这个,因为我不确定使用简单的赋值语句时遇到了什么问题。我正在做一个家庭作业,要求我在一个简单的程序中编写结构和函数来绘制出ASCII字符的形状。现在我只是试图测试我写的函数,并且我正在试图为Circle结构的符号元素赋值,以测试我编写的DrawShape函数。当我尝试给它分配一个* char时,我收到一条错误消息,说“错误:从'const char *'无效转换为'char'”。我会把整个代码放进去,虽然它很长并且没有完成。任何帮助,这将不胜感激。我得到的问题是右主的开头“circle1.char =‘*’”从“const char *”到“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; 
} 
+4

这是方式,方法太长。 –

+3

您正在使用'“*”'',它是一个字符串,而不是'*'',它是一个字符。 –

+0

下一次,发布一个简短(但完整)的问题的例子... –

回答

18

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

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

1

你的Circle定义说,symbolchar,但你尝试将它分配一个字符串字面char[2]类型:

circle1.symbol = "*"; 

相反,你应该给它分配a char

circle1.symbol = '*'; 
0

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

1

您有:

circle1.symbol = "*"; 

您需要:

circle1.symbol = '*'; 
0

你的圈结构的 “符号” 的成员定义为单个字符。虽然看起来你正在分配一个字符,但你实际上正在分配一个长度为1的字符串或char *。区别在于:char a ='a'; char * a =“a”;这一切都在报价中。

5

问题是这里:

circle1.symbol = "*"; 

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

circle1.symbol = '*'; 
0

你的错误是在线circle1.symbol = "*";"*"const char * symbol(你的结构的)是char 尝试:circle1.symbol = '*';

相关问题