Programme qui ne compile pas

Programme qui ne compile pas - C++ - Programmation

Marsh Posté le 01-04-2007 à 13:39:52    

Je ne sais pas ce qui cloche là dedans :
 

Code :
  1. #include <string>
  2. #include <iostream>
  3. #include <vector>
  4. #include <math.h>
  5. #define a srand((unsigned)time(0))
  6. #define x rand()
  7. #define pi 3.1415
  8. using namespace std;
  9. int solv(int r)
  10. {
  11. int res=(int)(r*r+log(17)*pi+36);
  12. return(res);
  13. }
  14. int main()
  15. {
  16. if (1) a;
  17. std::vector<int> liste;
  18. for (int i=0;i<10;i++)
  19. {
  20.  for (int j=0;j<x%30;j++) liste.push_back((int)(exp(3)*2+log(7)-10));
  21.  liste.push_back(solv(4));
  22.  liste.push_back(111);
  23.  for (int j=0;j<x%10+2;j++) liste.push_back(40);
  24.  liste.push_back(62);
  25.  liste.push_back(123);
  26.  for (int j=0;j<x%5;j++) liste.push_back(10);
  27. }
  28. std::string chaine;
  29. for (int i=0;i<liste.size();i++) chaine+=&liste[i];
  30. std::cout<<chaine<<std::endl;
  31. return(0);
  32. }


 
le compilo me dit :
poisson.cc:34: error:   initializing argument 1 of 'std::basic_string<_CharT, _Traits, _Alloc                               >& std::basic_string<_CharT, _Traits, _Alloc>::operator+=(_CharT) [with _CharT = char, _Trait                               s = std::char_traits<char>, _Alloc = std::allocator<char>]'
 
Et là clairement, il me parle chinois...Est-ce que quelqu'un peut m'expliquer ce que baragoine le compilo quand il me sort des trucs comme ça?
 

Reply

Marsh Posté le 01-04-2007 à 13:39:52   

Reply

Marsh Posté le 01-04-2007 à 15:16:51    

Salut,
   Ben, comme il te le signale tu as un erreur ligne 34. chaine += &liste[i]; je sais pas ce que tu crois faire.... &liste[i] c'est un pointeur sur int... Et donc tu appelle un constructeur de string avec un pointeur sur int comme argument. c'est ça qui lui plait pas.
   La question, c'est plutôt qu'est ce que tu veux faire en fait ?

Reply

Marsh Posté le 01-04-2007 à 16:27:27    

Amonchakai a écrit :

Salut,
   Ben, comme il te le signale tu as un erreur ligne 34. chaine += &liste[i]; je sais pas ce que tu crois faire.... &liste[i] c'est un pointeur sur int... Et donc tu appelle un constructeur de string avec un pointeur sur int comme argument. c'est ça qui lui plait pas.
   La question, c'est plutôt qu'est ce que tu veux faire en fait ?


 
A la base une blague moisie de 1er avril (suffit de retirer le & ) , mais plus sérieusement, quelqu'un peut m'expliquer l'expression std::basic_string<_CharT, _Traits, _Alloc> ?

Reply

Marsh Posté le 01-04-2007 à 16:51:12    

  Et bien, c'est pas si compliqué : en fait déja std::string c'est la spécialisation du modèle std::basic_string pour les char.  
cf doc : http://www.sgi.com/tech/stl/basic_string.html
   Donc la, quand il te dit std::basic_string<_CharT, _Traits, _Alloc> et bien c'est tout simplement pour la spécialisation du modèle : tu spécifie le type de base que tu utilise pour ta string (_CharT), le char_traits<> qui sert a définirs plein de tuc comme les relations d'ordre et autres...  
cf : http://www.sgi.com/tech/stl/character_traits.html pour avoir toutes les info qu'il faut définir pour ton type.  
Et finalement _Alloc qui est l'allocateur (ce qui va gérer la mémoire).
   Donc voila ça pour plus de renseignent cf la doc de la STL : http://www.sgi.com/tech/stl/

Reply

Marsh Posté le 01-04-2007 à 17:31:36    

chaine+=&liste[i]
 
tu vas où là ...

Reply

Marsh Posté le 01-04-2007 à 17:38:39    

Taz a écrit :

chaine+=&liste[i]
 
tu vas où là ...


 
Oh lala tu pourrais faire semblant de retirer le &, de compiler et rire un coup pffffffffffffffffffffffff

Reply

Sujets relatifs:

Leave a Replay

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