Forum Clubic

[C/C++] Erreur lors de la compilation d'un prog de noob

:stuck_out_tongue:

voilà je commence le C et donc d’après un petit tutorial j’ai tapé ca sous Dev C++ :

#include <iostream.h>
int main()
{
int a;
a=80+20;
cout<<“La valeur de a est :”<<a<<endl;
return 0,
}

Apparement le “code” à l’air bon seulement lorsque je compile j’ai une erreur, voici le rapport :

2 C:\Program Files\DevC++\Dev-Cpp\include\c++\3.3.1\backward\backward_warning.h:32 #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 header for the <X.h> header for C++ includes, or instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated.
In function int main()': syntax error before}’ token

Donc voilà, apparement j’ai fais une erreur de syntaxe comme il me le dit mais je pas trop où, même s’il me dit la place.

Donc si quelqu’un peut m’éclairer je lui en serais reconnaissant :jap:

essaye #include au lieu de #include <iostream.h>

Voilà le rapport de l’erreur de compilation en en retirant le .h :

`cout’ undeclared (first use this function)

(Each undeclared identifier is reported only once for each function it appears

`endl’ undeclared (first use this function)

syntax error before `}’ token
[Warning] no newline at end of file

Il ne manquerait pas un petit “using namespace std;” par hasard avant le main ? :smiley:

Euhh et c’est quoi ce using namespace std, ca sert à quoi ?

J’ai retrouvé sur le forum Prog. une explication bien faite donnée par ffluff :jap: :

Post original

:kimouss:

Euhh et foo ca sert à quoi ? :confused:

Bin foo c’est juste le nom d’une fonction ; on pourrait très bien lui donner une autre nom :smiley:

Ah vi suis bête c’est dis ca en haut du code.

M’enfin pour le namespace ok mais pour mon problème je ne vois pas à quoi ca servirai d’en mettre un étant donné que que je n’ai aucune entité ayant le même nom.

Vu que la fonction cout fait partie de la STL (Standard Template Library), comprise dans le namespace std, il faut que tu déclares ce dernier pour pouvoir utiliser cette fonction-ci.

une petite question …

Quel est la difference entre devc++ et visual c++ au niveau des librairie, car l’exemple du premier post ne genere pas d’erreur sur visual c++ ( pas besoin de namespace… , ce qui semble d’ailleur normal puisque les fonction utilisé (cout, et puis le endl) sont definit dedans) ??

Les bibliothèques sont et doivent être identiques (dans leur résultat) la seule différence c’est que visual C++ lui est trés vicieux car ce genre d’erreur il ne te les indiques pas et les corriges tout seul. Donc tu te retrouve avec un programme que tu crois bon et tu le compile ailleurs et pouf marche plus.

En ce qui concerne ton code … tu as toutes les info nécéssaire pour les résoudre:

avant } y a quoi ? ‘return 0,’ c’est des ‘;’ et pas des ‘,’

Pour les namespaces tu n’es pas obligé d’en crée toi même. Mais si tu veux utiliser la bibliothèque STL tu es obliger de passer par le namespace std.
Soit en mettant std::cout std::endl soit en début de fichier ‘using namespace std’.
Ce dernier risque de te perdre car aprés tu ne saura plus quelle fonction/classe est dans STL ou non.

En ce qui concerne l’espace de nom , je viens de lire le chapitre qui s’y refere ( cours : http://casteyde.christian.free.fr/online/cours_cpp/c4911.html ) , et j’avoue ne pas comprendre ce paragraphe :

En gros, je suis un utilisateur qui passe du C au C++,
La fonction “exemple” existait en C (dans un header exemple.h), et existe en C++ mais avec de nouvelles fonctionnalité.
Je veut utilisé cette nouvelle version.
Si j’inclue exemple.h , est que je l’appelle, quel sera la fonction appelé ? celle du C ou du C++ ?
STD::exemple ou using namespace std vas me permettre d’utiliser la nouvelle ou l’ancienne ?

euh la tu t’embrouille tout seul je te conseil d’acheter un bon livre ou d’en louer un a la bibliothèque.

dans le même fichier pas possible ou alors c’était pas du C que tu faisais.
le C++ n’est pas une extension du C !!!
oublie les fonctions du C.

le namespace std appartient par convention a la bibliothèque standard STL. Pas a tes fonctions.
En C il est impossible d’utiliser les fonctions de la STL faites pour le C++

je me suis peut etre mal exprimé.
Je parlais bien de la bibliotheque STL, faites pour le c++.
Mais d’apres le paragraphe cité, il est indiqué que “la bibliothèque standard C++ reprend à son compte et complète par toutes ses fonctionnalités avancées.” et que d’autre part pour eviter les conflits de noms de fonction homonymes, “un jeu d’en-têtes complémentaires a été défini pour les fonctions de la bibliothèque C” .

J’aimerai juste comprendre comment en pratique cela est realisé.

Entre temps j’ai lu et relu ce paragraphe, et je crois avoir compris :

Le fait d’ajouter STD:: ( que l’on peut remplacer en indiquant au debut du programme qu’on utilise le namespace STD )veut dire qu’on utilise la fonction appartenent a la bibliotheque STL. (correct ?)

Si on inclue un header (standard, comme iostream par exemple) sans .H , ca veut dire que c’est un header des fonctions C et non C++ ( ou plus exactement n’appatenent pas a la librairie STL) Exact ?

Mais je me rends compte que l’une des mes affirmations doit etre fausse, puisque dans l’example de ce topic , il y a a la fois le
#include
et le
“using namespace std;”
…?

( Vous enervez pas dans les reponses, je vous jure , au bout d’un moment, j’arrive a comprendre :wink: )

Je comprends pas trés bien la citation non plus …

oui et non.
Par convention oui mais rien ne t’empeche de mettre tes fonctions/classes/etc dans le même namespace (mais c’est fortement déconseiller)

faux !
Un header est un header C++, <blabla.h> c’est du C (à ne pas confondre avec “blabla.h” ou la on ne sait pas si c’est du C ou C++)
Il également fortement conseillé de ne pas utiliser les fonctions du C en C++ (du moins en incluant directement les .h)