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

Visual C++ Discussion :

Erreur de Link


Sujet :

Visual C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut Erreur de Link
    Bonjour à tous !
    Dans un projet Windows Forms application, plus exactement dans le header de ma form je crée une fonction quelconque (en l'occurence ME() ).
    Je l'appelle depuis un évènement quelconque (en l'occurence OnClick())...

    Résultats :

    1>stdafx.obj : error LNK2005: "void __clrcall ME(void)" (?ME@@$$FYMXXZ) already defined in Projet.obj
    1>Projet.exe : fatal error LNK1169: one or more multiply defined symbols found

    Ca m'étonnerait que je sois le seul qui ait rencontré ce problème c'est pour celà que je fais appel à vos expériences dans Visual Studio.

    Merci à vous !

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    hé bien il semble que tu as déjà défini cette méthode dans ta classe...

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    Non !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    void ME()
    {
               int i = 0;
    }
     
    namespace X
    {
             public ref class FORM...
     
             private: System.... Evenements
                         { ME(); }
    };
    En fait je viens de régler le problème de l'exemple posé : il suffisait de rajouter inline devant void ME()...
    Bon dans le vrai exemple : on a le header de la form et un header qui n'appartient pas au projet.
    Dans le header je définis une classe avec une fonction membre.
    J'appelle la fonction membre du header dans un évènement de ma form (dans le header de la form).

    J'ai dans mon cas les erreurs suivantes avec scan3D le namespace contenant la définition de la form (situé dans le header de la form) et CWebCam::Connect ma fonction membre :
    1>stdafx.obj : error LNK2028: unresolved token (0A00000A) "public: int __clrcall CWebCam::Connect(short,short)" (?Connect@CWebCam@@$$FQAMHFF@Z) referenced in function "private: void __clrcall scan3D::Form1::takepicture_Click(class System::Object ^,class System::EventArgs ^)" (?takepicture_Click@Form1@scan3D@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    Class.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class CMyClass
    {
    public:
            CMyClass(){}
            void MyFonction();
    };
    Class.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void CMyClass::MyFonction()
    {
         // Do Something //
    }
    Form1.h
    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
     
    #include "Class.h"
     
    namespace MySpace
    {
            public ref class Form1 : public System::Windows::Forms::Form
            {
    public: 
    	             CMyClass *pClass; // INSTANCE de Class.h //
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Add the constructor code here
    			//
                                          pClass = new pClass;  
    		}
     
    	protected:
    		/// <summary>
    		/// Clean up any resources being used.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
     
    	private:
    		/// <summary>
    		/// Required designer variable.
    		/// </summary>
    		System::ComponentModel::Container ^components;
     
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Required method for Designer support - do not modify
    		/// the contents of this method with the code editor.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->SuspendLayout();
     
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(222, 336);
    			this->Controls->Add(this->label1);
    			this->Controls->Add(this->loadcam);
    			this->Controls->Add(this->listcam);
    			this->Controls->Add(this->takepicture);
    			this->Controls->Add(this->viewpicture);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->viewpicture))->EndInit();
    			this->ResumeLayout(false);
    			this->PerformLayout();
     
    		}
    #pragma endregion
     
    };
            }
    }
    On ajoute un évènement : par exemple l'évènement OnClick sur la Form1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private: System::Void Form1_Click(System::Object^  sender, System::EventArgs^  e) {
              this->pClass->MyFonction();
    }
    A l'appel de "MyFonction", c'est là qu'on a l'erreur de link.
    unresolved external symbol public: void MyFonction()... referenced in fonction
    private System::Void Form1_Click...

    J'espère avoir été clair (pour une fois)

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    heu c'est une erreur de copie la ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Form1(void)
            {
                InitializeComponent();
                //
                //TODO: Add the constructor code here
                //
                                          pClass = new pClass;  
            }
    c'est pClass = new CMyClass;

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    Erreur de copie excuse moi

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    Résolu par l'inclusion de la classe externe dans le header de la form
    + ajout d'une lib...
    C'était bidon...
    Merci comme même à toi farscape

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    effectivement un grand classique

Discussions similaires

  1. erreur de link
    Par meli0207 dans le forum MFC
    Réponses: 6
    Dernier message: 04/05/2007, 10h17
  2. template et erreur de link
    Par Willand dans le forum Langage
    Réponses: 12
    Dernier message: 05/12/2006, 21h19
  3. erreur de link(age) g++
    Par corwin dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/05/2004, 11h33
  4. [wxWindows] Erreur de link pour ODBC
    Par ovh dans le forum wxWidgets
    Réponses: 3
    Dernier message: 28/01/2004, 15h38
  5. DirectDrawCreate erreur de link
    Par Ing_Ben dans le forum DirectX
    Réponses: 1
    Dernier message: 01/12/2002, 18h46

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