Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3033 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  error: invalid operands of types 'const char [15]' and 'short ..

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

error: invalid operands of types 'const char [15]' and 'short ..

n°1158112
Profil sup​primé
Posté le 23-07-2005 à 23:27:39  answer
 

Hello world ;)
 
je débute (comme tous les ans :o ) en C++
J'ai écrit un petit script bash, et je le retranscris en C++.
 
J'ai déclaré 2 variables. J'ai choisi short car le nombre rentré ne devrait jamais être supérieur à 20)
 

Code :
  1. unsigned short pause = 0, what = 0;


 
Je demande les valeurs à l'utilisateur :

Code :
  1. cin >> pause;
  2. cin >> what;


 
Et en fonction de la valeur de what, j'exécute...
 

Code :
  1. if (what == 1)    //desktop
  2. system("import -pause " << pause << " -quality 90 -window root ~/shotdesktop-date-heure.png" );
  3. else if (what == 2)   //window or area
  4. system("import -pause " << pause << " -quality 90 -frame ~/shotarea-date-heure.png" );
  5. else if (what == 3)  //mplayer
  6. system("import -pause " << pause << " -quality 90 -window Mplayer ~/shotmplayer-date-heure.png" );
  7. else
  8. cout << "Mauvais choix ! Bye bye";
  9. return 0;


 
Mon problème, c'est d'intégrer la valeur de la variable 'pause', entrée par l'utilisateur, à la chaîne de system.
Il faut convertir pause en string ?
 
J'ai ca comme erreurs - Forcément, on retrouve la même à chaque fois ligne où il y a "pause" dans le if :

Citation :

g++ -o hello hello.cpp  
hello.cpp: In function 'int main()':
hello.cpp:26: error: invalid operands of types 'const char [15]' and 'short unsigned int' to binary 'operator<<'
hello.cpp:28: error: invalid operands of types 'const char [15]' and 'short unsigned int' to binary 'operator<<'
hello.cpp:30: error: invalid operands of types 'const char [15]' and 'short unsigned int' to binary 'operator<<'


Message édité par Profil supprimé le 23-07-2005 à 23:29:03
mood
Publicité
Posté le 23-07-2005 à 23:27:39  profilanswer
 

n°1158117
IrmatDen
Posté le 23-07-2005 à 23:36:04  profilanswer
 

Salut,
 
Dans l'erreur il te dit que tu ne possédes pas d'opérateur <<(const char*, short)
Donc, tu dois passer par une string temporaire, ce qui n'est pas un mal vu que la première moitié de ta string se répète.
 
Deux petites remarques:
- tu peux chainer les saisies,
- tu peux utiliser un switch pour les suites de if...else if...else if...

n°1158120
Profil sup​primé
Posté le 23-07-2005 à 23:54:53  answer
 

merci de ta réponse.
 
String temporaire pour pause ?
 
-chainer les saisies, ca veut dire quoi ?
-pour la condition, j'ai fait comme je savais, je regarderai pour l'optimiser avec un switch merci ;)
 
J'ai changé 'if' par 'switch' :)  
 

Code :
  1. switch (what) {
  2. case '1':    //desktop
  3. system("import -pause " << pause << " -quality 90 -window root ~/shotdesktop-x.png" );
  4. break;
  5. case '2':    //window or area
  6. system("import -pause " << pause << " -quality 90 -frame ~/shotdesktop-x.png" );
  7. break;
  8. case '3':   //mplayer
  9. system("import -pause " << pause << " -quality 90 -window Mplayer ~/shotdesktop-x.png" );
  10. break;
  11. default:   //aucun des 3 choix possibles
  12. cout << "Mauvais choix ! Bye bye";
  13. break;
  14. return 0; }
  15. }


Message édité par Profil supprimé le 24-07-2005 à 00:03:15
n°1158128
Taz
bisounours-codeur
Posté le 24-07-2005 à 00:12:24  profilanswer
 

bah tu fais une recherche sur le forum sur comment passer un int en std::string

n°1158204
Joel F
Real men use unique_ptr
Posté le 24-07-2005 à 08:44:42  profilanswer
 

indice :
 
#include <sstream>

n°1158208
Profil sup​primé
Posté le 24-07-2005 à 09:12:50  answer
 

j'ai avancé si on peut dire :/
D'ailleurs, y a t-il un glossaire avec la définition pour chaque "error" ?
 

Citation :

shot.cpp: In function 'int main()':
shot.cpp:35: error: no match for 'operator<<' in '"import -pause " << pause'
shot.cpp:38: error: no match for 'operator<<' in '"import -pause " << pause'
shot.cpp:41: error: no match for 'operator<<' in '"import -pause " << pause'


 
Les 2 bouts de codes en rapport.

Code :
  1. cin >> p;
  2. // créer un flux de sortie
  3.     ostringstream buffer;
  4.      // écrire un nombre dans le flux
  5.      buffer << p;
  6.      // récupérer une chaîne de caractères
  7.      string pause = buffer.str();


 
//un cout << pause; ici m'affiche bien la valeur de p..
 

Code :
  1. switch (what) {
  2. case '1':    //desktop
  3. system("import -pause " << pause << " -quality 90 -window root ~/shotdesktop-x.png" );
  4. break;


Message édité par Profil supprimé le 24-07-2005 à 09:14:08
n°1158210
Taz
bisounours-codeur
Posté le 24-07-2005 à 09:20:01  profilanswer
 

arrete le C++ ?

n°1158211
Profil sup​primé
Posté le 24-07-2005 à 09:22:49  answer
 

avec l'aide de cette catégorie, je crois bien.

n°1158213
Taz
bisounours-codeur
Posté le 24-07-2005 à 09:26:48  profilanswer
 

bah que veux tu qu'on te dises ... pourtant t'es dans le haut du panier vu que tu as trouvé un morceau de code qui fonctionne. Mais t'as pas du  lire le reste. Tu vas nulle part vu que :
- tu comprends pas la notion de type
- ton compilateur te dit que les opérandes sont pas valides. Prend un dictionnaire si tu sais pas ce qu'est une opérande.
 
Y a aucune magie, c'est pas en mélangeant les lignes que ça va finir par marcher.

n°1158233
Joel F
Real men use unique_ptr
Posté le 24-07-2005 à 10:36:04  profilanswer
 

Code :
  1. cin >> p;
  2. ostringstream buffer;
  3. buffer << "import -" << p << " -quality 90 -window root ~/shotdesktop-x.png";
  4. string toto= buffer.str();
  5. switch (what) {
  6. case '1':    //desktop
  7. system(toto.c_str());
  8. break;


 
 
ET c'est bien parce que c'est dimanche :o

mood
Publicité
Posté le 24-07-2005 à 10:36:04  profilanswer
 

n°1158604
Profil sup​primé
Posté le 25-07-2005 à 00:00:30  answer
 

merci beaucoup Joel F  :jap:  
Le programme fonctionne maintenant.
Voici le code. Je suis sur que c'est mal écrit, alors j'attends vos reproches.
 
Donc pour la conversion, il faut passer à "buffer", toute la chaîne, et pas seulement le nombre à convertir... c'est pas ce que j'avais compris avec la solution de http://c.developpez.com/faq/cpp/?p [...] S_numtostr
 

Code :
  1. int main()
  2. {
  3. unsigned short p = 0, what = 0;
  4. cout << "Entrez un nombre en secondes avant le déclenchement du screenshot" << endl;
  5. cin >> p;
  6.     ostringstream buffer1, buffer2, buffer3;
  7. buffer1 << "import -pause " << p << " -quality 90 -window root ~/shotdesktop-x.png";
  8. buffer2 << "import -pause " << p << " -quality 90 -frame ~/shotarea-x.png";
  9. buffer3 << "import -pause " << p << " -quality 90 -window Mplayer ~/shotmplayer-x.png";
  10. string pause1=buffer1.str();
  11. string pause2=buffer2.str();
  12. string pause3=buffer3.str();
  13. cout << "Que voulez-vous capturer ?" << endl;
  14. cout << "1) Bureau entier" << endl;
  15. cout << "2) Fenêtre ou zone à sélectionner" << endl;
  16. cout << "3) Mplayer" << endl;
  17. cout << "Entrez un N°" << endl;
  18. cin >> what;
  19. switch (what) {
  20. case 1:    //desktop
  21. system(pause1.c_str());
  22. break;
  23. case 2:    //window or area
  24. system(pause2.c_str());
  25. break;
  26. case 3:   //mplayer
  27. system(pause2.c_str());
  28. break;
  29. default:   //aucun des 3 choix possibles
  30. cout << "Mauvais choix ! Bye bye";
  31. break;
  32. return 0; }
  33. }


Message édité par Profil supprimé le 25-07-2005 à 00:05:26
n°1158641
Taz
bisounours-codeur
Posté le 25-07-2005 à 00:59:46  profilanswer
 

remplace  
 
cin >> p;
 
 
par
 
if(not (cin >> p)) { cout << "pas bon"; return 1; }

n°1158646
Profil sup​primé
Posté le 25-07-2005 à 01:47:28  answer
 

ok, merci Taz

n°1159310
Profil sup​primé
Posté le 25-07-2005 à 18:25:48  answer
 

le if(no..) c'était bien pour dire pas bon et fermer si la personne ne répond pas à la question pour 'p' ?
Car si je ne réponds pas (si je tape ENTREE sans entrer de valeur), ca ne fait rien de particulier... ca fait comme s'il n'y avait pas le if.

n°1159316
theshockwa​ve
I work at a firm named Koslow
Posté le 25-07-2005 à 18:31:44  profilanswer
 

fais un Control-Z puis entrée et tu verras, j'imagine ...

n°1159317
Profil sup​primé
Posté le 25-07-2005 à 18:33:29  answer
 

Citation :

./shot
Entrez un nombre en secondes avant le déclenchement du screenshot
 
[1]+  Stopped                 ./shot


 
je suis sous Linux...


Message édité par Profil supprimé le 25-07-2005 à 18:35:55
n°1159321
theshockwa​ve
I work at a firm named Koslow
Posté le 25-07-2005 à 18:45:06  profilanswer
 

dans ce cas, ctrl+D :o

n°1159330
Profil sup​primé
Posté le 25-07-2005 à 18:55:28  answer
 

ok, donc le msg du if s'affiche si on quitte le programme... je vois pas trop l'utilité qd meme puisque si on quitte c'est qu'on veut pas continuer..

n°1159334
theshockwa​ve
I work at a firm named Koslow
Posté le 25-07-2005 à 18:59:53  profilanswer
 

c'est si tu as un problème de flux d'entrée, que le message sort ... une fin de flux inattendue est un cas problématique à traiter, normalement :o
 
ctrl-D n'a jamais été un raccourci pour "quitter" quoi que ce soit

n°1159336
Profil sup​primé
Posté le 25-07-2005 à 19:02:52  answer
 

d'accord. Oui, sauf pour se délogguer en vitesse ;)

n°1159367
Taz
bisounours-codeur
Posté le 25-07-2005 à 19:22:46  profilanswer
 


t'as que tapper du texte à la place d'un entier pour voir ...

n°1159464
Profil sup​primé
Posté le 25-07-2005 à 20:10:13  answer
 

en effet ! je crois que c'est le plus parlant.
Merci.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  error: invalid operands of types 'const char [15]' and 'short ..

 

Sujets relatifs
string->const char* pas ok en mode debuglink error - undefined reference to `std::ios_base::Init::Init()'
Comparaison de typeslinker error sur dev CPP avec la librairie tiff
Où trouver la librairie sys/types.h?Probleme On error goto
ERROR C2533 constructor not allowed a return type!!Copie de tableau de structure de double dans un tableau char
probleme sur des types OLE 
Plus de sujets relatifs à : error: invalid operands of types 'const char [15]' and 'short ..


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR