Go Down

Topic: error : was not declared in this scope (Read 10070 times) previous topic - next topic

eeaeea

Il faut passer l'adresse du buffer.

Aurais tu un exemple s'il te plait ?
Et du coup mettre en argument des int, puis dans la fonction créer 4 chaines des de caractères, les passer dans sprintf puis afficher les "caractères imprimés" cela marcherait ?

kamill

Tu as l'exemple dans le code que je t'ai donné

eeaeea

Exact merci beaucoup ! Je n'arrive toujours pas a afficher le contenu d'un tableau d'objet ( le test 3), meme en utilisant ton exemple :/ aurais tu un dernier tuyau ?

kamill

Est ce que tu arrives à compiler ton programme?

eeaeea

Code: [Select]
       lcd.clear();
       afficher(
       (sprintf(affichage1,"test n°%d",e),affichage1),
       obj[e-1][0],
       "et                  ", 
       (sprintf(affichage1,obj[0][1]),affichage1));


Oui, j'ai essayé les 2 manières, pour la ligne 4 ce n'est pas étonnant,
la ligne 3 fonctionne
la ligne 4 : error: cannot convert 'String' to 'char*' for argument '2' to 'void afficher(char*, char*, char*, char*)'

        obj[0][1]);

mais ligne 6 : error: cannot convert 'String' to 'const char*' for argument '2' to 'int sprintf(char*, const char*, ...)'

        (sprintf(affichage1,obj[0][1]),affichage1));

kamill

Je n'arrive pas à savoir ce que tu veux afficher!
Ce que tu montres n'a rien à voir avec la question précédente.

eeaeea

J'aimerais afficher avec la fonction afficher() le contenu d'un tableau d'objet sur une de mes lignes

kamill

Pour afficher un tableau d'objet il faut savoir de quel objet il s'agit.
Dans ton cas c'est un tableau de String (tu es d'ailleurs mal parti en nommant ton tableau obj, ce qui prête à toutes les confusions sémantiques).

Pour répondre à ta question pour afficher une String il suffit de la convertie en chaine de caractères
par exemple obj[0][0].c_str()

eeaeea

Excuse moi encore une fois de t'embeter mais ca ne marche pas :

Code: [Select]
      afficher(
      "testligne1    ",
      "testligne2    ",
      "testligne3    ",
      test[0][1].c_str());



cela me renvoie une erreur dans le .h


error: initializing argument 4 of 'void afficher(char*, char*, char*, char*)' [-fpermissive]
void afficher(char chaine1[20], char chaine2[20], char chaine3[20], char chaine4[20]);


ainsi qu'une erreur dans le .ino

error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
 test[0][1].c_str());


kamill

Il faut que tu déclare tes paramètres de afficher consomme constants (dans le .h et le point .cpp).
Code: [Select]
void afficher(const char chaine1[20], const char chaine2[20], const char chaine3[20], const char chaine4[20]);
Il y a d'autres problèmes dans ton programme d'affichage je te laisse le plaisir de les découvrir.

eeaeea

Ca marche merci ! Oui il y a comme erreur :



sketch\test.ino.cpp.o:(.bss.lcd+0x0): multiple definition of `lcd'

sketch\testt.cpp.o:(.bss.lcd+0x0): first defined here

c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.8.1/../../../../avr/bin/ld.exe: Disabling relaxation: it will not work with multiple definitions

collect2.exe: error: ld returned 1 exit status

exit status 1
Erreur lors de la compilation.


J'ai donc déclaré LiquidCrystal lcd en extern dans le .cpp et maintenant ca compile sans erreur ! C'est cette erreur dont tu parlais ?




kamill

entre autre et ça fonctionne maintenant?

eeaeea

Non, aucun message d'erreur mais ca n'affiche pas :/

kamill

Tu affiches le dernier caractère au lieu de la chaine

Code: [Select]
void afficher(char chaine1[20], char chaine2[20],char chaine3[20], char chaine4[20])
{
lcd.setCursor(0,0);
lcd.print(chaine1[20]);
lcd.setCursor(0,1);
lcd.print(chaine2[20]);
lcd.setCursor(0,2);
lcd.print(chaine3[20]);
lcd.setCursor(0,3);
lcd.print(chaine4[20]);
}


à remplacer par
Code: [Select]
void afficher(char chaine1[20], char chaine2[20],char chaine3[20], char chaine4[20])
{
 lcd.setCursor(0,0);
 lcd.print(chaine1);
 lcd.setCursor(0,1);
 lcd.print(chaine2);
 lcd.setCursor(0,2);
 lcd.print(chaine3);
 lcd.setCursor(0,3);
 lcd.print(chaine4);
}

eeaeea

Effectivement... ca m'apprendra a faire des copier coller ! Merci beaucoup le probleme est résolu :)

Go Up