Je ne comprend pas tout... Une petite explication serait sympathique.

Je ne comprend pas tout... Une petite explication serait sympathique. - C++ - Programmation

Marsh Posté le 25-06-2006 à 18:25:12    

Salut à tous,
 
Je commence sérieusement le C++, et là j'ai un retour de g++ qui me trouble moi en tant que débutant. (le problème avec moi c'est que je code en très haut niveau depuis 7 ans (j'ai commencé jeune la prog), mais je ne me suis jamais attaqué au bas niveau, donc si il y a des choses qui ne se font pas en C++, dite le moi (au niveau du code))).
 
Voilà, donc je crée mon premier "programme", ce programme est censé retourner les résultats de la ligne de commande.
 
Voici mon code :
 

Code :
  1. #include <iostream.h>
  2. int main(int argc, char *argv[])
  3. {
  4. int i;
  5. cout << "Nombre d'argument : " << argc << "\n";
  6. for (i=0; i<argc; i++)
  7.  cout << "Argument " << i << " : " << argv[i] << "\n" ;
  8. return 0;
  9. }


 
Ce programme "fonctionne" (il y a une petite erreur que je détaillerai à la fin de ce topic), mais g++ me sort ce warning lors de la compilation :
 

Citation :

damien@White-Side:~/Documents/C++> g++ hello.cpp
In file included from /usr/include/c++/4.1.0/backward/iostream.h:31,
                 from hello.cpp:1:
/usr/include/c++/4.1.0/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.


 
Voilà, donc comme je ne pense pas être bête, j'ai fait ce que me dit le message, je remplace <iostream.h> par <iostream>,
mais g++ me sort ça :

Citation :

damien@White-Side:~/Documents/C++> g++ hello.cpp
hello.cpp: In function ‘int main(int, char**)’:
hello.cpp:6: error: ‘cout’ was not declared in this scope


 
Voilà, donc maintenant je ne comprend plus rien, et j'aurai besoin d'une petite aide pour comprendre celà.
 
Sinon, une autre chose étrange (pour moi) :
 
Mon programme (avec <iostream.h> et pas <iostream> ) me retourne celà :

Citation :

damien@White-Side:~/Documents/C++> ./hello arg1 arg2
Nombre d'argument : 3
Argument 0 : ./helloArgument 1 : arg1Argument 2 : arg2


 
Mon soucis là est que j'ai mis pourtant dans le code un "\n", mais il n'y a aucun saut de ligne effectué, pourquoi ?
 
Voilà, je vous remercie.
 
Willits

Reply

Marsh Posté le 25-06-2006 à 18:25:12   

Reply

Marsh Posté le 25-06-2006 à 18:28:24    

tu dois faire std::cout

Reply

Marsh Posté le 25-06-2006 à 18:32:20    

Je te remercie caddie, pour std::cout et <iostream>.
 
Mais il reste encore le problème des retours de ligne.

Reply

Marsh Posté le 25-06-2006 à 18:35:08    

Willits a écrit :


 
Mon soucis là est que j'ai mis pourtant dans le code un "\n", mais il n'y a aucun saut de ligne effectué, pourquoi ?
 
Voilà, je vous remercie.
 
Willits


 
std::cout << "Nombre d'argument : " << argc << std::endl;


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 25-06-2006 à 18:39:27    

En fait, si je comprend bien, la différence (au niveau du simple programmeur) entre <iostream.h> et <iostream> ce situe dans le std:: (si je comprend toute les fonctions de <iostream> doivent être invoqué avec le std:: devant)
 
Que veux dire le std:: ?
 
Edit : (oubliez l'edit (si vous l'avez lus), je suis juste un crétin...  :pfff: )

Message cité 1 fois
Message édité par Willits le 25-06-2006 à 18:50:56
Reply

Marsh Posté le 25-06-2006 à 19:15:31    

Willits a écrit :

En fait, si je comprend bien, la différence (au niveau du simple programmeur) entre <iostream.h> et <iostream> ce situe dans le std:: (si je comprend toute les fonctions de <iostream> doivent être invoqué avec le std:: devant)
 
Que veux dire le std:: ?
 
Edit : (oubliez l'edit (si vous l'avez lus), je suis juste un crétin...  :pfff: )


<iostream.h> en C++, tu l'oublies, comme la quasi totalité des entêtes .h. les seuls entêtes valables en C++ sont ceux sans le .h
le std:: signifie que tu utilises les classes du namespace std. en C++, la notion de namespace est utilisée pour éviter les collisions de noms entre classes. ainsi tu peux avoir 2 classes nommées "toto", mais dans un namespace différent. la STL regroupe toutes ses classes dans le namespace std.
 
pour utiliser des objets d'un namespace, soit tu fais préfixer l'objet par le nom du namespace:: (std::), soit tu ajoutes la ligne suivante en début de programme :  
 
using namespace std;
 
comme ça, tu n'auras plus besoin de préfixer les objets de la STL par std::


Message édité par Harkonnen le 25-06-2006 à 19:15:46

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

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