2011-11-16 34 views
6

Quería publicar esto porque no estaba realmente seguro del problema que estaba teniendo con una simple declaración de asignación. Estoy haciendo una tarea que me pide que escriba estructuras y funciones en un programa simple para dibujar formas de caracteres ASCII. En este momento estoy tratando de probar las funciones que he escrito, y estoy tratando de asignarle un valor al elemento de símbolo de una estructura de círculo solo para probar la función DrawShape que escribí. Cuando trato de asignarle un * char, aparece un mensaje de error que dice "error: conversión inválida de 'const char *' a 'char'". Pondré todo el código, aunque es muy largo y sin terminar. Cualquier ayuda con esto sería apreciada. El problema que estoy consiguiendo es justo en el comienzo de la principal en "circle1.char = '*'"Conversión inválida de "const char *" a "char" error

#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

Esto es cierto, demasiado tiempo. –

+3

Está utilizando '" * "', que es una cadena, en lugar de ''*'' que es una char. –

+0

La próxima vez, publique un breve (pero completo) ejemplo del problema ... –

Respuesta

18

usted debe utilizar comillas simples para los personajes. Las comillas dobles significan que está utilizando un literal de cadena (potencialmente de un solo carácter), que se representa como const char * (puntero a carácter constante).

sintaxis correcta: circle1.symbol = '*';

1

Su definición de Circle dice que symbol es una char, sin embargo, intenta asignar una cadena literal de tipo char[2]:

circle1.symbol = "*"; 

En su lugar, debe asignarlo a char:

circle1.symbol = '*'; 
0

En C++ , un único carácter no está escrito con dobles comillas sino con comillas simples, es decir, '*', no "*". En realidad, "*" es una matriz de dos caracteres, el primero es '*' y el segundo es '\0' para marcar el final de la cadena.

1

tiene:

circle1.symbol = "*"; 

que necesita:

circle1.symbol = '*'; 
0

El "símbolo" miembro de su estructura círculo se define como un único carbón. Aunque parece que estás asignando un carácter, en realidad estás asignando una cadena o carácter * de longitud 1. La diferencia: char a = 'a'; char * a = "a"; Todo está en las citas.

5

El problema es aquí:

circle1.symbol = "*"; 

circle1.symbol se define como char, pero asigna una cadena a la misma (un conjunto de caracteres). Lo que hay que hacer es

circle1.symbol = '*'; 
0

Su error está en la línea circle1.symbol = "*";. "*" es una const char * symbol (de su estructura) es un Try char : circle1.symbol = '*';