2011-11-16 21 views
6

Volevo postare questo perché non ero veramente sicuro di quale problema stavo avendo con una semplice dichiarazione di assegnazione. Sto facendo un compito a casa che mi chiede di scrivere le strutture e le funzioni in un semplice programma per disegnare forme di caratteri ASCII. In questo momento sto solo provando a testare le funzioni che ho scritto, e sto cercando di assegnare un valore all'elemento simbolo di una struttura Circle solo per testare la funzione DrawShape che ho scritto. Quando provo ad assegnarlo a * char, ricevo un messaggio di errore che dice "errore: conversione non valida da 'const char *' a 'char'". Inserirò l'intero codice, sebbene sia molto lungo e incompleto. Qualsiasi aiuto con questo sarebbe apprezzato. Il problema che sto ottenendo è proprio nel inizio della principale "circle1.char = '*'"Conversione non valida da errore "const char *" a "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

Questo è il modo, troppo a lungo. –

+3

Stai usando '" * "', che è una stringa, invece di ''*'' che è un carattere. –

+0

La prossima volta, inserisci un BREVE (ma completo) esempio del problema ... –

risposta

18

si dovrebbe utilizzare virgolette singole per i caratteri. Virgolette doppie significa che stai usando un letterale stringa (potenzialmente single-character), che è rappresentato come const char * (puntatore a carattere costante).

sintassi corretta: circle1.symbol = '*';

1

La tua definizione di Circle dice che symbol è un char, ma si tenta di assegnare una stringa letterale di tipo char[2]:

circle1.symbol = "*"; 

Invece, si dovrebbe essere assegnandolo a char:

circle1.symbol = '*'; 
0

In C++ , un singolo carattere non viene scritto con doppie virgolette ma con virgolette singole, ad esempio '*', non "*". In realtà "*" è un array di due caratteri, il primo è '*' e il secondo è '\0' per contrassegnare la fine della stringa.

1

si dispone di:

circle1.symbol = "*"; 

è necessario scaricare:

circle1.symbol = '*'; 
0

Il "simbolo" membro della vostra struct Circle è definito come un singolo carattere. Anche se sembra che tu stia assegnando un carattere, in realtà stai assegnando una stringa o un carattere * di lunghezza 1. La differenza: char a = 'a'; char * a = "a"; È tutto tra virgolette.

5

Il problema è qui:

circle1.symbol = "*"; 

circle1.symbol è definito come char, ma si assegna una stringa ad esso (un array di caratteri). Quello che dovete fare è

circle1.symbol = '*'; 
0

Il tuo errore è alla linea circle1.symbol = "*";. "*" è un const char * symbol (della vostra struct) è un char Prova: circle1.symbol = '*';

Problemi correlati