[Solved] ERROR C2296: concatenation de chaines

ERROR C2296: concatenation de chaines [Solved] - C++ - Programmation

Marsh Posté le 21-03-2006 à 11:11:40    

Salut,
 
J'ai un petit pb de compil que je n'arrive pas a resoudre....
 
Voici le code:

Code :
  1. ...
  2. } catch (MySQLException &e)
  3. {
  4. string errorMsg = "SQL Error - Error code:" << e.GetOrigin()
  5.  << " Code:" << e.GetCode()
  6.  << " SubCode:" << e.GetSubCode()
  7.  << " Specific Code:" << e.GetSpecificCode();
  8. }
  9. ...


les getters renvoient tous des int.
 
Et voici l'erreur:
error C2296: '<<' : illegal, left operand has type 'const char [42]'
 
Merci pour votre aide :)


Message édité par agyspace le 21-03-2006 à 14:32:50
Reply

Marsh Posté le 21-03-2006 à 11:11:40   

Reply

Marsh Posté le 21-03-2006 à 11:40:00    

Bon j'ai a moitie resolu mon pb.Deja j'ai appris que je ne pouvais pas utiliser des << pour remplir une string. Soit!
J'ai donc mis directement la concatenation dans les arguments de mes fonctions, sans passer par une string internediaire.
En effet dans mon catch, je dois appeler une fonction de trace et une fonction qui throw une exception:
 

Code :
  1. catch(MySQLException &e)
  2. {
  3. myTrace(myCode,"SQL Error - Error code:" << e.GetOrigin()
  4.   << " Code:" << e.GetCode()
  5.   << " SubCode:" << e.GetSubCode()
  6.   << " Specific Code:" << e.GetSpecificCode());
  7. myException("SQL Error - Error code:" << e.GetOrigin()
  8.                         << " Code:" << e.GetCode()
  9.   << " SubCode:" << e.GetSubCode()
  10.   << " Specific Code:" << e.GetSpecificCode()),code);
  11. }


 
Bon comme vous le voyez ma 1ere fonction prend un entier(int) et une string et la 2e prend une string et un entier. Pour la premiere la concatenation passe tres bien.
Le pb vient de la seconde ou je me prends encore cette erreur de compil:
error C2296: '<<' : illegal, left operand has type 'const char [42]'
 
Je crois que ca vient du fait que je passe un argument apres un argument qui contient une suite de << mais je ne vois pas comment resoudre ce pb...
 
Une solution?
 
Merci beaucoup d'avance!

Reply

Marsh Posté le 21-03-2006 à 11:45:11    

c'est de la stl ? += ?

Reply

Marsh Posté le 21-03-2006 à 11:48:30    

t'as fait du ruby ou quoi toi ?

Reply

Marsh Posté le 21-03-2006 à 11:53:09    

Oui je sous Windows et j'utilise la STL. Je code sous Visual Studio.
Tu me parles de +=, mais justement est-ce la seule solution?
 
J'ai effectivement teste comme ca:
string errorMsg("SQL Error during RFD access - Origin:" );
errorMsg += e.GetOrigin();
errorMsg += " Code:";
errorMsg += e.GetCode();
errorMsg += " SubCode:";
errorMsg += e.GetSubCode();
errorMsg += " Specific Code:";
errorMsg += e.GetSpecificCode();
Et en placant errorMsg en arguments de mes 2 fontions ca marche parfaitement. Mais je trouve ca super lourd...
Il n'y aucun moyen de faire ca avec "<<"?

Reply

Marsh Posté le 21-03-2006 à 11:54:49    

euh non :??:
 
agyspace > et juste avec "+" dans ton appel de méthode ? note pour plus tard: "<<" et ">>" sont des opérateurs de streams il me semble. et string n'a pas de rapport avec stream.


Message édité par _darkalt3_ le 21-03-2006 à 11:57:34
Reply

Marsh Posté le 21-03-2006 à 13:29:25    

ostringstream :o
dans #include <sstream>

Reply

Marsh Posté le 21-03-2006 à 14:32:25    

Joel F a écrit :

ostringstream :o
dans #include <sstream>


 
Oui c'est exactement ca merci beaucoup :)
 

Code :
  1. ostringstream errorMsg;
  2. errorMsg << "SQL Error - Origin:" << e.GetOrigin()
  3. << " Code:" << e.GetCode()
  4. << " SubCode:" << e.GetSubCode()
  5. << " Specific Code:" << e.GetSpecificCode();


 
Et errorMsg.str() en argument dans mes fonctions.
 
Merci encore!  :wahoo:

Reply

Marsh Posté le 21-03-2006 à 14:48:46    

/me préfère de loin boost::format

Reply

Marsh Posté le 21-03-2006 à 15:45:08    

+1 pour boost

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed