IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Apparition d'erreurs inexpliquées lors de l'évolution du projet


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut Apparition d'erreurs inexpliquées lors de l'évolution du projet
    Bonjour à tous,

    Je commence par définir le contexte. Dans le déroulement de ma mission, j'ai eu à améliorer et débugger un programme déjà relativement "costaud" (2 headers+2 fichiers sources contenant plein de fonctions chacun, enfin cela me paraît conséquent, je suis impressionnable )

    Je suis parvenu à le faire tourner correctement. Maintenant l'enjeu actuel est de réussir à intégrer ce programme au sein d'un plus grand système. L'un des résultats qu'il renvoie est utilisé comme calcul intermédiaire.

    Et là, j'obtiens quelques erreurs de compilation dans une fonction, non pas situées dans les nouveaux fichiers sources, mais dans les anciens, alors que c'est une fonction mineure qui n'est utilisée que dans le premier projet qui tourne "parfaitement" ou presque.

    Je travaille sous VisualC++ 2008.

    Alors maintenant, je précise les erreurs :

    error C2143: syntax error : missing ';' before 'constant'
    , que je colore en Bleu.
    error C2109: subscript requires array or pointer type
    , que je colore en Rouge.

    Quand les deux erreurs concernent la même ligne de compilation, je colore en Vert.

    Voici la fonction incriminée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    double gamma1_FF0(double modip, double latitude_u, double longitude_u, double UT,int taille_coeff,double* tab_coeff)
    {
    
    int nq[dimensionFF0+1];
    double c[nb_harmonicFF0+1];
    double s[nb_harmonicFF0+1];
    double x,s0,s1,s2,ss,s3;
    int i,j,k,index,L,np;
    int ligne;
    int colonne;
    int mi;
    double coeff[101];
    double xsinx[14];
    
    double sum;
    
    if(taille_coeff==988)
    {
     nq[0]=0;//rajout
     nq[1]=11;
     nq[2]=11;
     nq[3]=8;
     nq[4]=4;
     nq[5]=1;
     nq[6]=0;
     nq[7]=0;
     nq[8]=0;
     nq[9]=0;
     ligne=13;
     colonne=76;
     }
     if(taille_coeff==441)
    {
     nq[0]=0;//rajout
     nq[1]=6;
     nq[2]=7;
     nq[3]=5;
     nq[4]=2;
     nq[5]=1;
     nq[6]=0;
     nq[7]=0;
     ligne=9;
     colonne=49;
    }
    
    //conversion heure (0h&24h) en angle radians (-Pi&Pi) : UT->(15*UT-180)*Pi/180
    x=PI*UT/12-PI;
    
    for(k=0;k<=nb_harmonicFF0;k++)
    {
     s[k]=sin(k*x);
     c[k]=cos(k*x);
    }
    
    coeff[0]=0;//rajout
    
    for (i=1;i<=colonne;i++)
    {
    mi=(i-1)*ligne;
    coeff[i]=tab_coeff[mi];
        for (j=1;j<=nb_harmonicFF0;j++)
        {
        coeff[i]=coeff[i]+tab_coeff[mi+2*j-1]*s[j]+tab_coeff[mi+2*j]*c[j];
        }
    }
    
    sum=coeff[1];
    ss=sin(modip*PI/180);
    s3=ss;
    xsinx[0]=0;//rajout
    xsinx[1]=1;
    index=nq[1];
    
    for(j=1;j<=index;j++)
                  {
                         if((fabs(ss))>=1E-30)
                         {
                         sum=sum+coeff[1+j]*ss;
                         xsinx[j+1]=ss;
                         ss=ss*s3;
                         }
                         else
                         {      
                         xsinx[j+1]=0;
                         }
                  }
    
    if(fabs(ss)>=1E-30)
    {
    xsinx[nq[1]+2]=ss;
    }
    else
    {
    xsinx[nq[1]+2]=0;
    }
    
    np=nq[1]+1;
    ss=cos(latitude_u*PI/180);
    s3=ss;
    
              for(j=2;j<=dimensionFF0;j++)
                   {
                         s0=longitude_u*(j-1)*PI/180;
                         s1=cos(s0);
                         s2=sin(s0);
                         index=nq[j]+1;
                         for(L=1;L<=index;L++)
                         {
                         np=np+1;
                         sum=sum+coeff[np]*xsinx[L]*ss*s1;
                         np=np+1;
                         sum=sum+coeff[np]*xsinx[L]*ss*s2;
                         }
                         ss=ss*s3;
                    }
    
    return sum;
    }
    (En fait il n'y a pas de bleu, bon je laisse cette convention au cas où).

    Je ne comprends vraiment pas, étant donné qu'elle marchait correctement avant et que les ; sont bien placés comme il le faut, du moins je crois.

    Quelqu'un a-t-il déjà vu une erreur apparaître dans les fichiers sources originels d'un programme lors de l'extension de celui-ci ? (sûrement je pense mais bon...)


    Je vous remercie vivement par avance pour toute indication, j'avoue être dans le flou.

    Bonne journée.

  2. #2
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    Où sont déclarer :
    nb_harmonicFF0
    dimensionFF0

    C'est peut-être de cette erreur que découle tout le reste :
    error C2143: syntax error : missing ';' before 'constant'

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut
    Citation Envoyé par fregolo52 Voir le message
    Où sont déclarer :
    nb_harmonicFF0
    dimensionFF0

    C'est peut-être de cette erreur que découle tout le reste :
    Salut,

    Ils sont déclarés en "DEFINE" dans un header qui est bien inclus dans le fichier source contenant la fonction gamma qui plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define nb_harmonicFF0 6
    #define dimensionFF0 9

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut
    J'ai trouvé la clé du problème, en fait il y a une constante nommée "c" dans les nouveaux fichiers headers et cela a interféré avec le tableau de double appelé lui aussi "c".

    Je leur ai donné un nom différent.

    Merci à ceux qui m'auront lu et à toi Fregolo52.

  5. #5
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    Mouais !!!
    Voici un bel exemple de code sans aucune règle de nommage, qui auto génère des erreurs évitables !!!

    Franchement, déclarer une constante avec 1 seule lettre, c'est délirant.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Par défaut
    Bonjour et désolé Kessoufi, tu arrives après la bataille. Enfin ton conseil me resservira pour plus tard.

    Fregolo : Oui, je me sens un peu bête là, c'est vrai que cette constante n'a pas le nom adéquat... à ma décharge, ce n'est pas moi qui ai écrit tous les fichiers et donc attribué le nom "c".

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 59
    Par défaut
    Salut

    vérifie si les "include guard" ne collisionnent pas avec d'autres dans ton projet, ça arrive souvent quand on duplique des fichiers headers pour en modifier le contenu.

    fichier A.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ifndef Mon_Header
    #define Mon_Header
    #endif
    fichier B.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #ifndef Mon_Header
    #define Mon_Header
    #define Taille 10
    #endif
    fichier C.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "A.h"
    #include "B.h"
    int array[Taille];
    t'auras la même erreur

    Cdt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur récurrente lors de la création de projet
    Par plumegrise dans le forum Android
    Réponses: 0
    Dernier message: 20/02/2015, 17h42
  2. erreur bizarre lors l'execution de mon projet
    Par info_sara dans le forum Qt
    Réponses: 2
    Dernier message: 26/06/2010, 10h23
  3. [WD15] Erreur fatale lors de l'ouverture du projet
    Par MicaelFelix dans le forum WinDev
    Réponses: 9
    Dernier message: 11/06/2010, 09h41
  4. Question facile, erreur bizzare lors d'un Left, Top
    Par SpiderAlpha dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2004, 12h56
  5. Erreur windows lors du malloc
    Par Elessar dans le forum C
    Réponses: 5
    Dernier message: 16/12/2003, 08h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo