wizard512
Messages postés459Date d'inscriptiondimanche 9 janvier 2005StatutMembreDernière intervention11 mai 2013
-
31 oct. 2010 à 10:02
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
2 nov. 2010 à 10:28
Bonjour,
J'ai un petit souci en langage C++ rien de bien compliquer mais bon sachant que je suis rouiller quelques années... J'ai créer une class avec en son sein deux fonctions. La première place tous simplement son argument dans un tableau (du moins elle essaye lol) et La deuxieme nous affiche le contenue du tableau.
En théorie c'est simple en pratique prise de tete...
Voici la ligne de commande pour la compilation : g++ -o tmp.exe tmp.cpp
Durant la compilation aucune erreur n'est retourner et la compilation s'effectue correctement, mais lors de l'exécution j'obtient une erreur de segmentation. Voici le code :
#define taille_tab(tab) sizeof(tab)/sizeof(tab[0])
#include <string>
#include
#include <vector>
using namespace std ;
class redigeForMe
{
public :
void addLigne( const char* str ) ;
void cc( void ) ;
vector< string > mesChaines;
static int counter ;
private :
int index ;
int nbIns ; // nombre d'instruction archivé
string HTMLcode ;
} ;
int redigeForMe::counter = 0 ;
void redigeForMe::addLigne( const char* str )
{
cout << counter << endl ;
mesChaines[ counter ] = str ;
counter += 1 ;
} ;
void redigeForMe::cc( void ) // Create Content
{
for( index = 0 ; index < counter ; index++ )
HTMLcode += mesChaines[ index ] + "\n" ;
cout << HTMLcode << endl ;
} ;
Voila son équivalent en php (en gros comment j'aurais souhaitez que sa marche)
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 2 nov. 2010 à 10:28
Plein de remarques:
- Évite les using namespace std, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace - Évite les char*, préfère les std::string.
- En C++, inutile de mettre void dans une fonction ne prenant pas d'argument, on préfère laisser les parenthèses vides.
- Lorsque l'on concatène un nombre indéfini d'éléments, on évite d'utiliser un std::string. On préfère utiliser une classe dédiée aux concaténations rapides: std::iostringstream.
- Pour parcourir une collection, on utilise une méthode unifié appelée "iterateur".
- Une fonction d'affichage prend généralement en argument le flux ou afficher (sortie standard, sortie d'erreur, un fichier, etc...).
Là c'est du détail:
- Une classe commence généralement par une majuscule.
- On différencie les attributs d'une classe, par exemple en les préfixant d'un "_".
- Met plus de warning sur ta ligne de compil, au moins: g++ -W -Wall -Wabi -pedantic
#include <sstream>
#include
#include <vector>
class RedigeForMe
{
public:
void addLigne(const std::string& str);
void cc(std::ostream& out);
private:
typedef std::vector<std::string>::const_iterator iter;
std::vector<std::string> _mesChaines;
int nbIns; // nombre d'instruction archivé
};
void RedigeForMe::addLigne(const std::string& str)
{
_mesChaines.push_back(str);
}
void RedigeForMe::cc(std::ostream& out)
{
std::ostringstream buff;
for (iter it = _mesChaines.begin(); it != _mesChaines.end() ; ++it)
buff << *it << std::endl;
out << buff.str() << std::endl;
}
int main()
{
RedigeForMe redige;
redige.addLigne("Linge 1");
redige.addLigne("Linge 2");
redige.cc(std::cout); // Sortie standard
redige.cc(std::cerr); // Sortie d'erreur
// redige.cc(file); // On pourrait aussi mettre un fichier
return 0;
}
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question