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 :

erreur de link


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 23
    Par défaut erreur de link
    Bonjour A tous

    J'ai ces trois programmes pour un projet.
    le fichier QUESTIO2.cpp est le main.
    En exécutant les fichier j'ai les erreurs suivants

    "Gravité Code Description Projet Fichier Ligne État de la suppression
    Erreur LNK2005 "public: void __thiscall dsys_fixpt::Init(short const * const)" (?Init@dsys_fixpt@@QAEXQBF@Z) déjà défini(e) dans pend_dsys_fixpt.obj Pendul E:\Code Cplus\Pendul\Pendul\QUESTIO2.obj"
    Je n'arrive pas à comprendre ces erreurs alors je demande des avis pour m'aider.

    Les trois fichier du projet "Pendul" :

    pend_dsys_fixpt.cpp
    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
    // Model: dsys_fixpt 
    // Sampling period = 0.010000 seconds
    //
    // Input scaling:  [4    2 1000]
    // State scaling:  [2   1 100  20]
    // Output scaling: [1000]
    // Generated at 15:55:30 on 30-Dec-2019
     
     
    class dsys_fixpt
    {
    public:
        // n = #states, m = #outputs, r = #inputs
        enum { n = 4, m = 1, r = 3 };
     
        void Init(const short x0[n]);
        void Upd(const short u[r]);
        const short* Out(void) const { return yy; }
        const short* Sta(void) const { return xx; }
     
    private:
        static const short aa[n * n], bb[n * r], cc[m * n], dd[m * r];
        short xx[n], yy[m];
    };
     
     
    const short dsys_fixpt::aa[n*n] =
    {
          1417,      0,   2257,      0,
             0,   4811,      0,   1327,
         -5025,      0,   7140,      0,
             0,  -2447,      0,   8464
    };
     
    const short dsys_fixpt::bb[n*r] =
    {
          9284,      0,  -4783,
            -6,   6365,   1962,
          4291,      0, -16311,
           -38,   3634,  12988
    };
     
    const short dsys_fixpt::cc[m*n] =
    {
          1367,   1564,   7940,   9145
    };
     
    const short dsys_fixpt::dd[m*r] =
    {
          7233,   3566,  -1951
    };
     
    void dsys_fixpt::Init(const short x0[n])
    {
        int i;
     
        // Initialize x
        for (i=0; i<n; i++)
            xx[i] = x0[i];
    }
     
    void dsys_fixpt::Upd(const short u[r])
    {
        int i, j, n_offset = 0, r_offset = 0;
        short x_next[n];
        long accum;
     
        // Evaluate x_next = A*x + B*u
        for (i=0; i<n; i++)
        {
            accum = 0;
     
            for (j=0; j<n; j++)
                accum += (long) aa[n_offset+j]*xx[j];
     
            for (j=0; j<r; j++)
                accum += (long) bb[r_offset+j]*u[j];
     
            accum = (accum >> 15) * 122955;
            x_next[i] = (short) (accum >> 15);
     
            n_offset += n;
            r_offset += r;
        }
     
        n_offset = 0;
        r_offset = 0;
     
        // Evaluate y = C*x + D*u
        for (i=0; i<m; i++)
        {
            accum = 0;
     
            for (j=0; j<n; j++)
                accum += (long) cc[n_offset+j]*xx[j];
     
            for (j=0; j<r; j++)
                accum += (long) dd[r_offset+j]*u[j];
     
            accum = (accum >> 15) * 153480;
            yy[i] = (short) (accum >> 15);
     
            n_offset += n;
            r_offset += r;
        }
     
        // Update x to its next value
        for (i=0; i<n; i++)
            xx[i] = x_next[i];
    }
    pend_model.cpp
    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
    // Model: pend_model 
    // Sampling period = 0.010000 seconds
    // Generated at 15:53:37 on 30-Dec-2019
     
     
    class pend_model
    {
    public:
        // n = #states, m = #outputs, r = #inputs
        enum { n = 4, m = 3, r = 1 };
     
        void Initialize(const double x0[n]);
        void Update(const double u[r]);
        const double* Output(void) { return y; }
        const double* State(void) { return x; }
     
    private:
        static const double a[n * n], b[n * r], c[m * n], d[m * r];
        double x[n], y[m];
    };
     
    const double pend_model::a[n*n] =
    {
          1.004530917e+00,   0.000000000e+00,   1.001509850e-02,   0.000000000e+00,
         -1.130852937e-04,   1.000000000e+00,  -3.768372393e-07,   1.000000000e-02,
          9.068671693e-01,   0.000000000e+00,   1.004530917e+00,   0.000000000e+00,
         -2.263412261e-02,   0.000000000e+00,  -1.130852937e-04,   1.000000000e+00
    };
     
    const double pend_model::b[n*r] =
    {
         -2.313229468e-03,
          3.081305201e-04,
         -2.320207355e-01,
          3.083046783e-02
    };
     
    const double pend_model::c[m*n] =
    {
          1.000000000e+00,   0.000000000e+00,   0.000000000e+00,   0.000000000e+00,
          0.000000000e+00,   1.000000000e+00,   0.000000000e+00,   0.000000000e+00,
          0.000000000e+00,   0.000000000e+00,   0.000000000e+00,   0.000000000e+00
    };
     
    const double pend_model::d[m*r] =
    {
         -3.848408621e-04,
          5.133768100e-05,
          1.000000000e+00
    };
     
    void pend_model::Initialize(const double x0[n])
    {
        int i;
     
        // Initialize x
        for (i=0; i<n; i++)
            x[i] = x0[i];
     
    }
     
    void pend_model::Update(const double u[r])
    {
        int i, j;
        double x_next[n];
     
        // Evaluate x_next = A*x + B*u
        for (i=0; i<n; i++)
        {
            x_next[i] = 0;
            for (j=0; j<n; j++)
                x_next[i] += a[i*n+j]*x[j];
     
            for (j=0; j<r; j++)
                x_next[i] += b[i*r+j]*u[j];
        }
     
        // Evaluate y = C*x + D*u
        for (i=0; i<m; i++)
        {
            y[i] = 0;
            for (j=0; j<n; j++)
                y[i] += c[i*n+j]*x[j];
     
            for (j=0; j<r; j++)
                y[i] += d[i*r+j]*u[j];
        }
     
        // Update x to its next value
        for (i=0; i<n; i++)
            x[i] = x_next[i];
     
    }
    QUESTIO2.cpp
    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
    #include <cstdio>
    #include <cassert>
    #include <cstring>
    #include <iostream>
     
    #include "pend_model.cpp"
    #include "pend_dsys_fixpt.cpp"
     
     
    using namespace std;
     
    int main()
    {
        // Declare the plant and controller objects
        dsys_fixpt controller;
        pend_model plant;
     
        // Specify the initial states
        short controller_x0[4] = {0, 0, 0, 0};
        double plant_x0[4] = {0, 0, 0, 0};
     
        // Call the plant and controller intialization functions
        controller.Init(controller_x0);
        plant.Initialize(plant_x0);
     
        // Set up for the dynamic loop
        const short *controller_output = controller.Out();
        const double *plant_output = plant.Output();
     
        int n = 0;               // Loop counter
        double h = 0.01;         // Sampling interval, seconds
        const double r = 0.9;    // Reference input
        const double N = -223.6; // Feedforward gain
        const double short_max = 32768;
     
        const double us[dsys_fixpt::r] = {4, 2, 1000};
        const double ys[dsys_fixpt::m] = {1000};
     
        // Start the real time clock counting from zero
     
        // Open the data logging output file
     
       // FILE *iov = fopen("pend.txt", "w");
       // assert(iov);
     
        FILE* iov;
        fopen_s(&iov, "pend.txt", "w");
        assert(iov);
     
        while (n < 71)
        {
            // Set up the controller inputs U
            short controller_u[3];
            for (int i=0; i<dsys_fixpt::r; i++)
                controller_u[i] = short(short_max * plant_output[i] /
                    us[i]);
     
            // Call the controller's Update function
            controller.Upd(controller_u);
     
            // Combine the controller output and the reference input
            double pend_u = (ys[0]*controller_output[0])/short_max +
                r*N;
     
            // Call the plant's Update function
            plant.Update(&pend_u);
     
            // Log the current plant and controller outputs
            fprintf(iov, "%lf %lf %lf %lf\n", n*h, 
                plant_output[0], plant_output[1], plant_output[2]);
     
            ++n;
            // Delay until time = n * h
        }
     
        fclose(iov);
    }
    Cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    L'erreur indique que tu a défini plusieurs fois une fonction. C'est interdit.
    Ton code cpp fait des includes de fichiers cpp. on ne doit jamais inclure des cpp, on ne doit inclure que des fichiers header.
    Ta fonction est donc vue définie lors de la compilation de QUESTIO2.cpp mais aussi lors de la compilation de pend_dsys_fixpt.cpp, c'en est trop.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 23
    Par défaut probleme resolue
    Bonjour Merci pour tes conseils.

    J'ai crée deux fichier Header ( pend_dsys_fixpt.h, pend_model.h) que j'ai associé aux fichiers :pend_dsys_fixpt.cpp et pend_model.cpp
    Dans le fichier QUESTIO2.cpp j'appelle maintenant les fichiers headers.

    Le programme fonctionne bien.

    Cordialement

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

Discussions similaires

  1. erreur non corriger (répondez moi svp)
    Par Damien04 dans le forum C++
    Réponses: 2
    Dernier message: 08/11/2006, 16h31
  2. aider à corriger une erreur de php
    Par LeYouss dans le forum Langage
    Réponses: 3
    Dernier message: 27/04/2006, 18h04
  3. [Configuration] besoin d'aides impossible de corriger les erreurs :(:((:
    Par moonia dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 11
    Dernier message: 27/03/2006, 10h36

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