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 :

pb de linkage


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut pb de linkage
    Bonjour,
    il y a qqch que je comprends pas dans les liens:

    Dans mon projet, j'ai dans un fichier mathplot.h une variable que je déclare comme ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double *tab2=new double[10000];
    ensuite, j'ai deux fichiers cpp;tous les deux possèdent l'instruction:

    ensuite, j'utilise tab2 comme ceci:

    Pour l'un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    long recherche(double y){
    	long i=0;
    	double tol=0;
    while(tol>0.0001){
      tol=abs(tab2[i]*10000-y);
    i=i+1;
    }
    return i;
    }
    pour l'autre:

    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
    void lance() 
    {
     
    	rec();
    calcul_stdeva();
    for(long i=debut;i<MaxPoint;i++){
    	tab2[i-1]=calculstdeva(i,memoire);
     
    	}
    }
     
    quand je compile, je recoit comme message:
     
    1>mp2.obj : error LNK2005: "double * tab2" (?tab2@@3PANA) déjà défini(e) dans mathplot.obj
    1>C:\Users\Pierre\Favorites\Documents\Visual Studio 2008\Projects\Graphs\Debug\Graphs.exe : fatal error LNK1169: un ou plusieurs symboles définis à différentes reprises ont été rencontrés
    y a qqch que je comprends pas la dedans. Je déclare tab2 dans le fichier .h, mais je ne déclare plus tab2 dans les fichiers cpp.
    comment faire pour déclarer une variable afin que celleci soit accessible dans TOUS les fichiers .cpp
    du projet?
    merci

  2. #2
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Ton header mathplot.h étant inclus (équivalent de copier/coller) dans tes deux cpp, ta définition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double *tab2=new double[10000];
    est donc existante dans les deux cpp (chaque cpp étant une unité de compilation).

    C'est interdit en c++ .
    Si tu veux que ton tableaux soit unique et accessible quand on inclus ton mathplot.h, tu dois faire juste une déclaration dedans :

    Puis avoir un unique cpp quelque part (mathplot.cpp) qui aurait la définition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double *tab2=new double[10000];
    En realité il faudra que tu mettes extern dans la déclaration pour que les autres unités de compilation aillent chercher la variable globale tab2 dans une autre unité de compilation (par exemple mathplot.cpp).

    Note : l'utilisation de variables globales est déconseillé dans la plupart des cas.

  3. #3
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    Note : l'utilisation de variables globales est déconseillé dans la plupart des cas.
    alors qu'est ce qu'il est privilégié de faire?

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par deubelte Voir le message
    alors qu'est ce qu'il est privilégié de faire?
    1/ Revoir ta conception.
    2/ Encapsuler dans une classe,
    3/ Eventuellement utiliser le pattern Singleton,
    4/ En plus, le code que tu proposes ressemble plus à du C qu'à du C++.

  5. #5
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    je n'ai pas de niveau suffisamment élevé pour faire la différence entre le C++ et le C. A mon niveau, c'est le même code

    mais puisqu'on y ait, j'aimerais créer une liste de nombre en utilisant la STL,et plus précisément vector, le truc qui permet de faire des recherches avec les clefs.
    je voudrais savoir si pour un vector de N variables, en quel O se fait la recherche.
    Est-ce du O(log(N)), du O(N)?
    merci

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ben, ça dépend comment tu fais ta recherche, et comment tu peux la faire...
    • Une recherche linéaire sur le vecteur est en O(n) (temps linéaire).
    • Par contre, si le vecteur est trié, les ajouts sont en O(n) (parce qu'ils deviennent des insertions) mais tu gagnes la possibilité de faire une recherche dichotomique dessus, en temps logarithmique...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par deubelte Voir le message
    je n'ai pas de niveau suffisamment élevé pour faire la différence entre le C++ et le C.
    Alors, tu gagneras certainement à consulter les différents cours et tutoriels du site.

    Citation Envoyé par deubelte Voir le message
    mais puisqu'on y ait, j'aimerais créer une liste de nombre en utilisant la STL,et plus précisément vector, le truc qui permet de faire des recherches avec les clefs.
    Une liste ou un vector ne permettent pas de faire des recherches avec des clés. Tu peux voir dans la FAQ les différentes conteneurs.
    Citation Envoyé par deubelte Voir le message
    je voudrais savoir si pour un vector de N variables, en quel O se fait la recherche.
    Est-ce du O(log(N)), du O(N)?
    merci
    A ton niveau, c'est vraiment important? Si tu es intéressé, dans ce site, tu trouveras des infos sur les complexités.

Discussions similaires

  1. Problème de linkage
    Par lvdnono dans le forum Windows
    Réponses: 4
    Dernier message: 15/06/2004, 12h32
  2. Pb de linkage tt du moins je pense
    Par lvdnono dans le forum DirectX
    Réponses: 8
    Dernier message: 13/06/2004, 19h57
  3. Coder un binaire PE sans étape de linkage
    Par Asmx86 dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 11/04/2004, 23h07
  4. [MFC ]Probleme de linkage d'une dll
    Par Lysis dans le forum MFC
    Réponses: 9
    Dernier message: 22/01/2004, 14h51
  5. Probleme de linkage avec DirectDraw7 sous BC++ 5.02
    Par bobtorn dans le forum DirectX
    Réponses: 3
    Dernier message: 07/10/2003, 20h14

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