Invalid conversion from char to const char*

Fermé
pierref17 Messages postés 6 Date d'inscription mercredi 18 novembre 2009 Statut Membre Dernière intervention 14 novembre 2013 - Modifié par pierref17 le 14/11/2013 à 12:02
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 14 nov. 2013 à 22:30
Bonjour,

Peut être une formalité pour vous, mais un calvaire pour moi, je ne comprends pas mon erreur, j'ai tout essayé, mais ça me ressort à chaque fois ce "invalid conversion from char to const char*" sur la dernière ligne (au moment de choisir une lettre dans mon alphabet).

Mon programme est un peu plus complexe que les seuls lignes que vous voyez, mais le principe est ici :
char alphabet[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};


TTF_Font *police = TTF_OpenFont("Times_New_Roman.ttf", 32);

SDL_Color blanc = {255, 0, 0};

texte = TTF_RenderText_Blended(police, alphabet[rand()%26], blanc);


J'ai essayé des choses de ce genre :
const char *alphabet = "abcdefghijklmnopqrstuvwxyz";


const char *alphabet = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};


Si vous avez des suggestions, je suis ouvert !
J'ai regardé sur les forums, la majorité c'est du C++, donc je n'ai pas réussi à l'adapter...

Merci !
A voir également:

2 réponses

[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 089
Modifié par [Dal] le 14/11/2013 à 14:00
Bonjour pierref17,


Le prototype de "TTF_RenderText_Blended" est, selon la documentation :

 3.4.9 TTF_RenderText_Blended


SDL_Surface *TTF_RenderText_Blended(TTF_Font *font, const char *text, SDL_Color fg)

font
Font to render the text with. A NULL pointer is not checked.
text
The LATIN1 null terminated string to render.
fg
The color to render the text in. Pixels are blended between transparent and this color to draw the sntialiased glyphs.


Donc le 2ème argument doit être un pointeur sur char qui toit pointer vers une chaîne C (un ou plusieurs char terminés par '\0').

Or, tu passes un char, en passant
alphabet[rand()%26]
.

Pour résoudre ton problème, il te suffit de créer une chaîne C pouvant contenir ton caractère (et le caractère '\0' terminant la chaîne) et d'y mettre le caractère aléatoire que tu veux passer.

Quelque chose dans ce goût là :

    /* les chaînes sont dimensionnées pour accueillir le nombre

* de caractères attendu et, en plus, le caractère de fin
* de chaîne '\0'
*/
/* pour les 26 lettres de l'alphabet */
char alphabet[27] = "abcdefghijklmnopqrstuvwxyz";

/* pour une chaîne d'un caractère */
char st_lettre[2];

/* terminer la chaîne */
st_lettre[1] = '\0';

/* y mettre une lettre au hasard */
st_lettre[0] = alphabet[rand()%26];

/* passer cela a la fonction attendant une chaîne */
texte = TTF_RenderText_Blended(police, st_lettre, blanc);


Dal
1
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 089
14 nov. 2013 à 14:00
Désolé pour les sauts de ligne dans le code, il sont insérés d'office par CCM aujourd'hui.

Dal
0
pierref17 Messages postés 6 Date d'inscription mercredi 18 novembre 2009 Statut Membre Dernière intervention 14 novembre 2013
14 nov. 2013 à 16:53
Merci beaucoup pour ton aide Dal ! ça marche impeccable !
Maudit \0 !
Je trouve ça quand fou de devoir créer une variable avec le caractère de fin de chaîne.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
14 nov. 2013 à 22:30
Il n'y a pas de variable de type chaîne de caractères en C. On est obligé de passer par un pointeur sur char ou un tableau de char. Bref il s'agit d'une succession de caractères. Il faut donc bel et bien définir une fin. Et oui, le C est un langage ancien :-).
0