VC6 Syntax error

VC6 Syntax error - C - Programmation

Marsh Posté le 03-06-2004 à 15:02:48    

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 ?

Reply

Marsh Posté le 03-06-2004 à 15:02:48   

Reply

Marsh Posté le 03-06-2004 à 15:49:18    

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 !!

Reply

Marsh Posté le 03-06-2004 à 16:36:08    

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

Reply

Marsh Posté le 03-06-2004 à 16:58:57    

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)

Reply

Marsh Posté le 03-06-2004 à 17:16:25    

c'est laquelle cette putain de ligne

Reply

Marsh Posté le 03-06-2004 à 17:18:50    

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

Reply

Marsh Posté le 03-06-2004 à 17:21:26    

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...

Reply

Marsh Posté le 03-06-2004 à 17:25:58    

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

Reply

Marsh Posté le 03-06-2004 à 17:37:51    

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
Reply

Marsh Posté le 03-06-2004 à 18:24:25    

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?

Reply

Marsh Posté le 03-06-2004 à 18:24:25   

Reply

Marsh Posté le 03-06-2004 à 19:05:27    

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

Reply

Marsh Posté le 03-06-2004 à 19:29:38    

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

Reply

Marsh Posté le 03-06-2004 à 19:33:48    

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

Reply

Marsh Posté le 03-06-2004 à 22:05:48    

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


Reply

Marsh Posté le 03-06-2004 à 22:11:09    

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 ?

Reply

Marsh Posté le 03-06-2004 à 22:26:54    

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é ?)...

Reply

Marsh Posté le 03-06-2004 à 22:38:34    

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.

Reply

Marsh Posté le 03-06-2004 à 23:29:44    

zifox a écrit :

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


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

Reply

Marsh Posté le 03-06-2004 à 23:36:45    

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

Reply

Marsh Posté le 03-06-2004 à 23:46:52    

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
Reply

Marsh Posté le 03-06-2004 à 23:52:08    

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);

Reply

Marsh Posté le 03-06-2004 à 23:54:04    

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
Reply

Marsh Posté le 04-06-2004 à 00:03:58    

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 ?

Reply

Marsh Posté le 04-06-2004 à 00:43:10    

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é.

Reply

Marsh Posté le 04-06-2004 à 05:48:10    

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

Reply

Marsh Posté le 04-06-2004 à 06:32:52    

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

Reply

Marsh Posté le 04-06-2004 à 12:56:24    

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...

Reply

Marsh Posté le 04-06-2004 à 13:07:26    

: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
Reply

Marsh Posté le 04-06-2004 à 13:21:29    

ouais cai remplace jusqu'à que ça marche ?

Reply

Marsh Posté le 04-06-2004 à 13:52:36    

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

Reply

Marsh Posté le 04-06-2004 à 14:02:51    

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

Reply

Marsh Posté le 04-06-2004 à 14:13:57    

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

Reply

Marsh Posté le 04-06-2004 à 14:28:23    

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

Reply

Marsh Posté le 04-06-2004 à 14:29:26    

ou on fais des macros à la con

Reply

Marsh Posté le 04-06-2004 à 15:32:07    

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...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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