Erreur de débutant..je suppose [;)] [Résolu]

Signaler
Messages postés
49
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
26 janvier 2005
-
cs_AlexMAN
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Bonjour !
Voilà j'ai un petit problème, qui me mène dans un mauvais état, mais qd même pas au bord du suicide lol...
j'ai une erreur dans mon code, en voici un bout :
  int pgcd(int a, int b)
  {
      int r,c;

et l'erreur est à l'acolade ( { )
Comme vous l'avez pu remarquer, c'est une fonction :big)
l'erreur c'est : error before `{' token
voilà, ca ça doit surement indiquer qqchose, non ?
enfin c'est mes premières hueres de programmations c++, donc j'ai du mal lol..
Enfin, merci !!

bthivent, jeune programmeur c++ dans ses débuts ;)

10 réponses

Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

ta fonction il faut que tu la declare avt le int main
eventuellemetn tu peux la definire plus tard par example a la fin de ton prog mais pas ds la fonction main
en c on ne peut declarer comme en fortran ou en pascal de subroutine
ca donnerais environ ca (pas verifier le reste
#include 
#include <stdlib.h>

using namespace std;
// Declaration et initialisation de la fonction pgcd
int pgcd(int a, int b)
{
int r,c;
while (r!=0)
{
a/b=c;
a%b=r;
a=c;
b=r;
}
return (c);
}

//Debut du program
int main(int argc, char *argv[])
{

int a,b,pgcd;

count << "A?";
cin >> a;
count << "B?";
cin >> b;

pgcd = pgcd(a,b);

cout << "PGCD de " << a << " et de " << b << " est " << pgcd << endl;
system("PAUSE"); 
return 0;
}


ou ca
#include 
#include <stdlib.h>

using namespace std;
// Declaration de la fonction pgcd
int pgcd(int a, int b);

//Debut du program
int main(int argc, char *argv[])
{

int a,b,pgcd;

count << "A?";
cin >> a;
count << "B?";
cin >> b;

pgcd = pgcd(a,b);

cout << "PGCD de " << a << " et de " << b << " est " << pgcd << endl;
system("PAUSE"); 
return 0;
}

//initialisation de la fonction
int pgcd(int a, int b);
{
int r,c;
while (r!=0)
{
a/b=c;
a%b=r;
a=c;
b=r;
}
return (c);
}

une fonction ne peut etre declare ds une autre fonction (la fonction main n'est qu'une fonction particuliere)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
charche l'erreur bien plus haut, les infos du compilo sont parfois a interpreter.

ciao...
BruNews, MVP VC++
Messages postés
49
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
26 janvier 2005
2
euh, plus haut..... ? ?-)
bon voici mon petit code, en fait je fais juste ca pour m'entrainer, la c'est pour trouver le pgcd.. bon je n'ai pas du tout vérifié le système que j'utilise, ca ca peut se faire après je pense ? mais donc je voulais compiler et donc erreur ligne 9
#include 
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
  int pgcd(int a, int b)
  {
      int r,c;
      while (r!=0)
      {
          a/b=c;
          a%b=r;
          a=c;
          b=r;
      }
      return (c);
  }
  
  int a,b,pgcd;
  
  count << "A?";
  cin >> a;
  count << "B?";
  cin >> b;
  
  pgcd = pgcd(a,b);
  
  cout << "PGCD de " << a << " et de " << b << " est " << pgcd << endl;
  system("PAUSE");
  return 0;
}

j'ai vu aussi que j'avis quelquelques variables non définies :
r undeclared l.11
a l.13
b l.13
c l.13

et pour le while, j'ai fait complétement au pif en fait lol, car je programme en php, et je me suis demander avec espoir si ca allait marcher... Car pour l'instant les seuls tutoriaux que j'ai suivis étaient sur c++ pour les (gros) nuls... et le tutorial sur les structures de contrôle n'était pas encore fait...
Donc merci pour les réponses et votre aide [;]

bthivent, jeune programmeur c++ dans ses débuts ;)
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

je complete le message plus
toute variable doit etre declare avt d'etre utilise contrairement au php ou java qui permet de les declarer en ligne (les fonctions sont des variables a declarer aussi avt utilisation)
si tu declare les variables aau siens de la fonction elles n'auron qu'une porte local c'est a dre qu'elle n'existerons et n'auront une valeure qu'seins de cette fonction
donc la a et b sont a definir juste avant la declaration de ta fonction

#include 
#include <stdlib.h>

using namespace std;

//Declaration des variables
unsigned int a, b; //ou encore long a, b;

// Declaration et initialisation de la fonction pgcd
int pgcd(int a, int b)
{
int r,c;
while (r!=0)
{
a/b=c;
a%b=r;
a=c;
b=r;
}
return (c);
}

//Debut du program
int main(int argc, char *argv[])
{

int a,b,pgcd;

count << "A?";
cin >> a;
count << "B?";
cin >> b;

pgcd = pgcd(a,b);

cout << "PGCD de " << a << " et de " << b << " est " << pgcd << endl;
system("PAUSE"); 
return 0;
}
Messages postés
49
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
26 janvier 2005
2
Eh bien merci ! mais maintenant, encore une erreur (comme si j'avais pu m'e ntier comme ça....)
voici mon ma nouvelle source :
#include 
#include <stdlib.h>

using namespace std;

int pgcd(int a, int b)
  {
      int r,c;
      while (r!=0)
      {
          a/b=c;
          a%b=r;
          a=c;
          b=r;
      }
      return (c);
  }

int main(int argc, char *argv[])
{  
  int a,b,pgcd;
  
  count << "A?";
  cin >> a;
  count << "B?";
  cin >> b;
  
  pgcd = pgcd(a,b);
  
  cout << "PGCD de " << a << " et de " << b << " est " << pgcd << endl;
  system("PAUSE");
  return 0;
}

et j'ai de drôles d'erreur :
une erreur l.11 à ca
a/b=c;

erreur : "non-lvalue in assignment"
enfin je crois qu'il y a énormément de fautes lol..
il y a la même faute ligne 12.. et plein d'autres (l.23, 25 et 28)
28 je pense que c'est normal, l'erreur est "`pgcd' cannot be used as a function" et comme il y a une erreur dedans.. mais 23 et 25, c'est : "23 C:\Documents and Settings\Bertrand T\Mes documents\C++\Helloworld\main.cpp invalid operands of types `' and `const char[3]' to binary `operator<<' "
?? là je bloque ...
Merci pour votre support :big)

bthivent, jeune programmeur c++ dans ses débuts ;)
Messages postés
49
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
26 janvier 2005
2
ah j'avais pas vu ton deuxième message. Mais j'ai essayé en déffinissant a et b avant, mais ca ne change rien à mon erreur...

bthivent, jeune programmeur c++ dans ses débuts ;)
Messages postés
49
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
26 janvier 2005
2
warf l'erreur de pigeon en fait !
j'ai trop fait de calculette lol !
(a/b sto-> c)... alala.. lol
bon ca va mieu, la j'ai l'erreur : "25 C:\Documents and Settings\Bertrand T\Mes documents\C++\Helloworld\main.cpp invalid operands of types `' and `const char[3]' to binary `operator<<' " pour ce bout de code :
count << "A?";

Donc je vais essayer de trouver ça seul, puis sinon, je l'enlèverai, ou changerai, enfin voila quoi...
eh bien Merci pour votre support !
@+ !

bthivent, jeune programmeur c++ dans ses débuts ;)
Messages postés
49
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
26 janvier 2005
2
j'en reviens même pas, mettre count au lieux de cout mdrrrr...
déoslé pour cette idiotue, @+

bthivent, jeune programmeur c++ dans ses débuts ;)
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

lvalue signifit left value
le msg du compilo signifit que l'expression a/b n'est pas un left value
pour le symbole "+" lvalu equivau a rvalue
mais pour certain operateur qui accepte 2 argument la gauche et la droite ne peuvent pas etre interchange c(est le ca de l'operateur d'affectation "="

attention cependant le symbole "=" peut correspondre a l'operateur de comparaison ou d'affectation ds les premier cas lvalue er rvalue peuvetn etre interverti pas dans l'autre

ds r=a%b "=" est un operateur d'affectation
ds while a=x "=" est un operateur de comparaison lvalue et rvalue peuvent etre interverti

pour plus d'info sur lvalue et rvalue voir sur http://www.developpez.com/ y a de tres bon tuto
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
1
int pgcd(int a, int b)
{
int r,c;
while (r!=0)
{
a/b=c;
a%b=r;
a=c;
b=r;
}
return (c);
}

Tu ferais mieux de :

-ou initialisé r a une valeur kelkconk tant ke superieur a 0 (pas bo)
-ou alors remplacé ta boucle while par une do {} while.

Paske la, r a une valeur totalement aleatoire, donc tu n'es mm pas sur ke ca boucle...enfin bon, jte conseille kan mm dutiliser do {} while..

Bonne chance

++