Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1358 connectés 

  FORUM HardWare.fr
  Programmation
  C

  VC6 Syntax error

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VC6 Syntax error

n°750834
zifox
Posté le 03-06-2004 à 15:02:48  profilanswer
 

J'ai une erreur assez bizarre sous visual, la seule qui me reste d'ailleurs  [:totoz]  
 
Bref voici le code:
 

Code :
  1. float CalculMinimum ( BNode * node, Vector nc, float bmin, float bmax, float pas);
  2. //
  3. ...
  4. //
  5. float min;
  6. min = CalculMinimum( rootCluster, resEigen[2], - distance, distance, PAS);


Donc basiquement je veux stocker un resultat dans une variable. Rien de compliqué jusque la.
et voila ce que me sort Visual:
 


\src\model.cpp(320) : error C2059: syntax error : '='


 
Je sais pas du tout d'ou ca vient. J'ai meme pensé que c'etait un bug du compilateur, donc j'ai installé le SP4, mais ca deconne toujours.
 
C'est grave docteur, ou je passe a coté de quelque chose d'evident ?

mood
Publicité
Posté le 03-06-2004 à 15:02:48  profilanswer
 

n°750977
Carbon_14
Posté le 03-06-2004 à 15:49:18  profilanswer
 

La fonction CalculMinimum renvoie bien un float (des fois que la déclaration ne "suive" pas le prototype).
 
Déjà vu des erreurs dues à erreur précedente, mais si y en a plus qu'une, celle là.
 
Up !!

n°751066
Ace17
Posté le 03-06-2004 à 16:36:08  profilanswer
 

Essaie de changer le nom de "min" pour voir...

n°751103
zifox
Posté le 03-06-2004 à 16:58:57  profilanswer
 

La fonction minimum renvoie bien un float, et en changeant "min" de nom, le probleme est toujours la.
 
Quelle "truc" en amont pourrait generer ce type d'erreur ?
Si je commente la ligne, et intialise min avec une valeur arbitraire, le prog fonctionne. (le resultat des calculs est faux, mais ca fonctionne)

n°751127
Taz
bisounours-codeur
Posté le 03-06-2004 à 17:16:25  profilanswer
 

c'est laquelle cette putain de ligne

n°751129
Ace17
Posté le 03-06-2004 à 17:18:50  profilanswer
 

ben la seule ligne ou y'a un '='

n°751132
Ace17
Posté le 03-06-2004 à 17:21:26  profilanswer
 

Tu dis qu'en faisant :

Code :
  1. float min = 3.14f;


ca compile. Et si tu fais :

Code :
  1. float min;
  2. min = 3.14f;


Que se passe-t-il?
 
Je reste convaincu que tu devrais changer de nom parce que tres souvent y'a une macro min qui est définie...

n°751137
Taz
bisounours-codeur
Posté le 03-06-2004 à 17:25:58  profilanswer
 

ben si tout ça c'est hors fonction, c'est évidemment incorrect

n°751151
zifox
Posté le 03-06-2004 à 17:37:51  profilanswer
 

Ace17: les deux bouts de code que tu as ecrit passent (c'est ce que je fait pour pouvoir compiler). par contre des que je lui dis de stocker le resultat de CalculMinimum, ca foire.
j'ai changé de nom, en passant.
 
Taz: hors fonction ?
edit: cette ligne fait partie d'une fonction, si c'est la ta remarque.


Message édité par zifox le 03-06-2004 à 17:40:18
n°751232
Ace17
Posté le 03-06-2004 à 18:24:25  profilanswer
 

Considere le code qui se trouve avant la ligne ou y'a l'erreur. Met en commentaire tout le code du corps de la derniere fonction, sauf la ligne d'erreur, bien sur. L'erreur est-elle toujours la? Si oui, rebelote mais avec la fonction d'encore avant. Etc..... Des que l'erreur disparait, tu nous poste le code de la fonction que tu as commenté en dernier. Ok?

mood
Publicité
Posté le 03-06-2004 à 18:24:25  profilanswer
 

n°751284
zifox
Posté le 03-06-2004 à 19:05:27  profilanswer
 

Apres avoir commenté tout ce qui était au dessus de cette ligne :D, je me suis dis: je vais pas me prendre la tete pour ca, je vais recuperer ma valeur en passant mini (le nouveau nom) en parametre.
 
Devinez quoi ? l'erreur est toujours la. Alors qu'il n'y a plus de signe "="...  :sweat:  
 
Le probleme, c'est que l'erreur peut venir d'un autre fichier ( des headers que j'inclus au dessus, et pas ecrit par moi, ces fichiers font partie d'une lib mathematique.), et je peux pas tous les commenter :D

n°751323
el muchach​o
Comfortably Numb
Posté le 03-06-2004 à 19:29:38  profilanswer
 

T'as mis le #include "StdAfx.h" en tête de fichier ?

n°751331
Ace17
Posté le 03-06-2004 à 19:33:48  profilanswer
 

Et le message d'erreur c'est quoi? ( quand il n'y a plus le signe '=' )

n°751587
zifox
Posté le 03-06-2004 à 22:05:48  profilanswer
 

le meme qu'avant : \src\model.cpp(320) : error C2059: syntax error : '=' !
 
el muchacho: non je l'avais pas. Ce fichier apporte quoi ?
Je l'ai rajouté, ai commenté le windows.h que j'includais, et il me sort ces erreurs :
 

Citation :


model.cpp
d:\apps\microsoft visual studio\vc98\include\gl\gl.h(1152) : error C2144: syntax error : missing ';' before type 'void'
d:\apps\microsoft visual studio\vc98\include\gl\gl.h(1152) : error C2501: 'WINGDIAPI' : missing storage-class or type specifiers
d:\apps\microsoft visual studio\vc98\include\gl\gl.h(1152) : fatal error C1004: unexpected end of file found
main.cpp
d:\apps\microsoft visual studio\vc98\include\gl\gl.h(1152) : error C2144: syntax error : missing ';' before type 'void'
d:\apps\microsoft visual studio\vc98\include\gl\gl.h(1152) : error C2501: 'WINGDIAPI' : missing storage-class or type specifiers
d:\apps\microsoft visual studio\vc98\include\gl\gl.h(1152) : fatal error C1004: unexpected end of file found
render.cpp
utils.cpp
d:\apps\microsoft visual studio\vc98\include\gl\gl.h(1152) : error C2144: syntax error : missing ';' before type 'void'
d:\apps\microsoft visual studio\vc98\include\gl\gl.h(1152) : error C2501: 'WINGDIAPI' : missing storage-class or type specifiers
d:\apps\microsoft visual studio\vc98\include\gl\gl.h(1152) : fatal error C1004: unexpected end of file found


n°751596
zifox
Posté le 03-06-2004 à 22:11:09  profilanswer
 

apres un google rapide, si j'ai bien compris, stdafx a quelque chose a voir avec les mfc.
J'utilise la sdl, je me demande si c'est pas pour ca que ca deconne ?

n°751616
pascal_
Posté le 03-06-2004 à 22:26:54  profilanswer
 

Tu peux pas poster le code de  toute la fonction qui appelle CalculMinimum ?
A mon avis, il y a une erreur de syntaxe avant (un ; oublié ?)...

n°751624
zifox
Posté le 03-06-2004 à 22:38:34  profilanswer
 

ouaip voila :
 

Code :
  1. void CalculMinimum ( BNode * node, Vector nc, float bmin, float bmax, float pas, float & retour)
  2. {
  3. float middle=(bmin+bmax)/2;
  4. float tempdist1=0;
  5. float tempdist2=0;
  6. if( bmax - bmin < EPSILON ) retour = (float)middle;
  7. else
  8. { // on separe notre intervalle en trois intervalles de recherche
  9.  for (int i = 0 ; i < node->clusterSize ; i++)
  10.  {
  11.  tempdist1 = tempdist1 + (
  12.   pow(node->ptrPointSet[i][0] - node->Barycentre[0] + (middle-pas) * nc[0],2) +
  13.   pow(node->ptrPointSet[i][1] - node->Barycentre[1] + (middle-pas) * nc[1],2) +
  14.   pow(node->ptrPointSet[i][2] - node->Barycentre[2] + (middle-pas) * nc[2],2));
  15.  tempdist2 = tempdist2 + (
  16.   pow(node->ptrPointSet[i][0] - node->Barycentre[0] + (middle+pas) * nc[0],2) +
  17.   pow(node->ptrPointSet[i][1] - node->Barycentre[1] + (middle+pas) * nc[1],2) +
  18.   pow(node->ptrPointSet[i][2] - node->Barycentre[2] + (middle+pas) * nc[2],2));
  19.  }
  20.  if(tempdist1 < tempdist2) CalculMinimum( node, nc, bmin, middle+pas, pas, retour);
  21.  else if (tempdist1 > tempdist2) CalculMinimum( node, nc, middle-pas, bmax, pas,retour);
  22.  else CalculMinimum( node, nc, middle-pas, middle+pas, pas,retour);// cas tout a fait improbable
  23.  }
  24. }


 
juste pour preciser que cette fonction n'est pas dans le meme fichier.

n°751662
Ace17
Posté le 03-06-2004 à 23:29:44  profilanswer
 

zifox a écrit :

le meme qu'avant : \src\model.cpp(320) : error C2059: syntax error : '=' !


Ca, ca vient d'une macro .....

n°751675
Ace17
Posté le 03-06-2004 à 23:36:45  profilanswer
 

On veut pas le code de CalculMinimum mais le code de la fonction qui l'appelle! Celui ou il y a l'erreur

n°751697
el muchach​o
Comfortably Numb
Posté le 03-06-2004 à 23:46:52  profilanswer
 

zifox a écrit :

le meme qu'avant : \src\model.cpp(320) : error C2059: syntax error : '=' !
 
el muchacho: non je l'avais pas. Ce fichier apporte quoi ?
 


 
Il sert à inclure des headers précompilés. Toutes les directives d'includes que tu mets dedans seront compilés une fois pour toutes dans le projet, ce qui accélère considérablement la compilation. Normalement, il faut un flag de compile qui doit être là par défaut. Et il faut rebuilder le projet entier pour éviter des erreurs.
 
Je pige pas, la signature de ta méthode CalculMinimum a changé ?
Tu mets :
 
float CalculMinimum ( BNode * node, Vector nc, float bmin, float bmax, float pas);
 
Puis :
 
void CalculMinimum ( BNode * node, Vector nc, float bmin, float bmax, float pas, float & retour) {...}
 
si tu l'as définie comme ça, normal qu'il y ait un syntax error !


Message édité par el muchacho le 03-06-2004 à 23:49:58
n°751713
zifox
Posté le 03-06-2004 à 23:52:08  profilanswer
 

Ace17: oups pardon mal lu ton post...
 
el muchacho:je l'ai renommée en pensant qu'en virant le "=" sur cette ligne ca arrengerait les chose. Le prototype correspond à la def de la fonction, pas de probleme de ce coté là.
cf ci dessous:
(j'ai mis tout le code de la function qui se situe AVANT l'appel. la ligne incrimée en tout en bas)

Code :
  1. void Model::CalcReduc ( BNode & rootCluster )
  2. {
  3. float mini; // valeur de la translation effectuée sur le barycentre avant projection.
  4. float distance,temp;
  5. float resEigen[4][3];
  6. // weighted covariance matrix
  7. float C[3][3];
  8. if ( rootCluster.LeftFils != NULL ) //since a node have both children or no children we only test one.
  9. {
  10.  CalcReduc ( *rootCluster.LeftFils ); //iterate the same op on the left child
  11.  CalcReduc ( *rootCluster.RightFils );//and the right one
  12.  rootCluster.ReducedPointsContained = rootCluster.LeftFils->ReducedPointsContained + rootCluster.RightFils->ReducedPointsContained;
  13.  //printf("%i\n",rootCluster.ReducedPointsContained);
  14. }
  15. else // The node is a leaf, we are going to compute the representative point
  16. {
  17.  //Calcul du point le plus pres du barycentre
  18.  //Point nearestNeighbour;
  19.  //printf("%f %f %f\n", rootCluster.Barycentre[0], rootCluster.Barycentre[1], rootCluster.Barycentre[2]);
  20.  for (int k = 0; k < rootCluster.clusterSize ; k++)
  21.  {
  22.   if((temp=
  23.    pow( rootCluster.ptrPointSet[k][0] - rootCluster.Barycentre[0],2) +
  24.    pow( rootCluster.ptrPointSet[k][1] - rootCluster.Barycentre[1],2) +
  25.    pow( rootCluster.ptrPointSet[k][2] - rootCluster.Barycentre[2],2) ) < pow(distance,2)) distance = sqrt(temp);
  26.  }
  27.  //filling C
  28.  for (k = 0; k < rootCluster.clusterSize ; k++)
  29.  {
  30.   for(int i = 0 ; i < 3 ; i++ )
  31.   {
  32.    for (int j = 0 ; j < 3 ; j++)
  33.    {
  34.     C[i][j] = C[i][j] +
  35.     ( ((rootCluster.ptrPointSet[k][i] - rootCluster.Barycentre[i] ) *
  36.        (rootCluster.ptrPointSet[k][j] - rootCluster.Barycentre[i] ))*
  37.      exp(-(( rootCluster.ptrPointSet[k][0] - rootCluster.Barycentre[0] ) +
  38.      ( rootCluster.ptrPointSet[k][1] - rootCluster.Barycentre[1] ) +
  39.      ( rootCluster.ptrPointSet[k][2] - rootCluster.Barycentre[2] ) ) / (3 * distance) )
  40.     );
  41.    }
  42.   }
  43.  }
  44.  CalcEigenValues( C, resEigen);
  45.  //on effectue la recherche de minimisation de la somme des carres des distances du point final au nuage de point sur un intervalle limite par la plus petite distance en le barycentre et son plus proche voisin. Inutile d'aller voir plus loin, on ne pourra pas faire "traverser" le nuage de point a notre barycentre
  46.  CalculMinimum( rootCluster, resEigen[2], - distance, distance, PAS, mini);

n°751721
el muchach​o
Comfortably Numb
Posté le 03-06-2004 à 23:54:04  profilanswer
 

Ah donc en fait tu fais du C++...
 
Déjà, sors le "temp = ..." du if(), qu'on y voie plus clair.
Tu peux aussi écrire "c[i][j] +=..." voire dérouler la boucle si t'as besoin d'optimiser...
 
Et PAS, c'est une constante ou une macro ?


Message édité par el muchacho le 04-06-2004 à 00:08:06
n°751738
pascal_
Posté le 04-06-2004 à 00:03:58  profilanswer
 

Et le code tout con comme ça :
 

Code :
  1. void Model::CalcReduc ( BNode & rootCluster )
  2. {
  3.      float mini; // valeur de la translation effectuée sur le barycentre avant projection.  
  4.      float distance,temp;
  5.      float resEigen[4][3];
  6.      // weighted covariance matrix  
  7.      float C[3][3];
  8.    
  9.        
  10.    
  11.     mini =  CalculMinimum( rootCluster, resEigen[2], - distance, distance, PAS, mini);
  12. }


 
il compile ?
 
 
Sinon, dans ton premier post tu fais min=... or tu as seulement déclaré une variable mini, c'est normal ?

n°751816
zifox
Posté le 04-06-2004 à 00:43:10  profilanswer
 

el muchacho: PAS est une constante.
 
pascal: non.
 
j'ai renommé min en mini sur le conseil de Ace17 me disant que min etait peut etre un nom reservé.

n°751867
Taz
bisounours-codeur
Posté le 04-06-2004 à 05:48:10  profilanswer
 

void CalculMinimum ( BNode * node
 
tu vois bien que c'est pas bon là déjà

n°751871
Ace17
Posté le 04-06-2004 à 06:32:52  profilanswer
 

Commente, l'intérieur des boucles, et dis nous si ca compile

n°752421
zifox
Posté le 04-06-2004 à 12:56:24  profilanswer
 

Taz: euh non, je vois pas... qu'est ce qui n'est pas bon ?
 
avec les boucles commentées ca passe pas non plus :(
(j'ai meme essayé de commenter tout le if et le else, ca change rien).
 
Argh je comprends vraiment pas d'ou ca peut venir...

n°752432
zifox
Posté le 04-06-2004 à 13:07:26  profilanswer
 

:sweat: Taz : je sais pas si c'est ce que tu voulais faire remarquer, mais la def :  

Code :
  1. void Model::CalcReduc ( BNode & rootCluster )


est pas bonne. Me demande comment j'ai pas remarqué ca avant.
 
j'ai donc remplacé par :

Code :
  1. void Model::CalcReduc ( BNode * rootCluster )


 
ce qui fait que je passe bien un BNode * à CalculMinimum.  
 
Malheureusement le probleme avec le '=' est toujours là :pt1cable:  
 
pour eclaircir la chose:

Code :
  1. void Model::CalcReduc ( BNode * rootCluster )
  2. {
  3. float mini; // valeur de la translation effectuée sur le barycentre avant projection.
  4. float distance,temp;
  5. float resEigen[4][3];
  6. // weighted covariance matrix
  7. float C[3][3];
  8. if ( rootCluster->LeftFils != NULL ) //since a node have both children or no children we only test one.
  9. {
  10.  CalcReduc ( rootCluster->LeftFils ); //iterate the same op on the left child
  11.  CalcReduc ( rootCluster->RightFils );//and the right one
  12.  rootCluster->ReducedPointsContained = rootCluster->LeftFils->ReducedPointsContained + rootCluster->RightFils->ReducedPointsContained;
  13. }
  14. else
  15.        {
  16.  for (int k = 0; k < rootCluster->clusterSize ; k++)
  17.  {/*  TOUT EST COMMENTE    */  }
  18.  //filling C
  19.  for (k = 0; k < rootCluster->clusterSize ; k++)
  20.  { /*  TOUT EST COMMENTE    */  }
  21.  CalcEigenValues( C, resEigen);
  22.         CalculMinimum( rootCluster, resEigen[2], - distance, distance, PAS, mini);


Message édité par zifox le 04-06-2004 à 13:10:59
n°752446
Taz
bisounours-codeur
Posté le 04-06-2004 à 13:21:29  profilanswer
 

ouais cai remplace jusqu'à que ça marche ?

n°752481
Carbon_14
Posté le 04-06-2004 à 13:52:36  profilanswer
 

Et en modifiant la fonction et son appel : un seul argment, deux, trois voir si ça vient de l'appel ? CalculMinimum(rootCluster) etc....

n°752492
zifox
Posté le 04-06-2004 à 14:02:51  profilanswer
 

euh non là ca fonctionne toujours pas.
 
Carbon_14: je vais essayer ca

n°752505
zifox
Posté le 04-06-2004 à 14:13:57  profilanswer
 

OK merci a tous, j'ai trouvé le probleme.
Suivant le conseil de Carbon, j'ai viré les arguments un par un pour voir ou ca buggait. C'est le parametre pas qui fonctionnait pas.
J'ai eu un doute pendant une minute avant d'aller verifier l'endroit ou je declarait PAS. Celui ci est declaré par un define, mais mal ecrit:

Code :
  1. #define PAS = 0.0001


C'est de là que vient le probleme du '=' ! ! !
C'est sur que = c'est pas vraiment un float... :D

n°752525
Carbon_14
Posté le 04-06-2004 à 14:28:23  profilanswer
 

On a des fois des réflexes malencontreux. Ca ma fait qq chose du genre une fois avec copier/coller mal adapté...

n°752528
Taz
bisounours-codeur
Posté le 04-06-2004 à 14:29:26  profilanswer
 

ou on fais des macros à la con

n°752675
el muchach​o
Comfortably Numb
Posté le 04-06-2004 à 15:32:07  profilanswer
 

zifox a écrit :

OK merci a tous, j'ai trouvé le probleme.
Suivant le conseil de Carbon, j'ai viré les arguments un par un pour voir ou ca buggait. C'est le parametre pas qui fonctionnait pas.


 
Ben tiens...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  VC6 Syntax error

 

Sujets relatifs
parser error-Résolu- [EasyPHP] Internal Server Error !
[PHP] Super globales et directive error_reporting sur E_ALLerror C2146, C2501et C1004 en VC++
Constraint_error : puiss4.adb:126 index check failed[VC6] Autre editeur de resource ?
[C/C++] Probleme de link sous VC6FATAL ERROR : ImageCreateFromJpeg()
c# unsafe error : cannot take the address or size of a variable of...Déport server APACHE => autre PC via LAN (error 403 access sub dir)
Plus de sujets relatifs à : VC6 Syntax error


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR