wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 2

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Problème de linkage
Conversation (Résolue) : Problème de linkage
03-06-2010 09:28:53  Problème de linkage #1
yannp (Membre)
Inscrit le : 02-06-2010
Messages: 61
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour,

Tout d'abord, bravo pour ce site, il est très ben fait et il m'a été bien utile.

J'ai un problème au moment du link d'un petit projet en wxWidget.

J'ai l'erreur suivante :

linker:
||=== YAPE_Music, Release ===|
obj\Release\windowsComposition.o:windowsComposition.cpp:(.rdata$_ZTV14winComposition[vtable for winComposition]+0x2c)||undefined reference to `winComposition::GetEventTable() const'|
obj\Release\windowsComposition.o:windowsComposition.cpp:(.rdata$_ZTV14winComposition[vtable for winComposition]+0x30)||undefined reference to `winComposition::GetEventHashTable() const'|
||=== Build finished: 2 errors, 0 warnings ===|
Je comprends qu'il s'agit d'une méthode qu'il ne trouve pas. J'ai beau chercher, je ne trouve pas.

Voici les sources :

main.cpp :

Code wxWidgets:

#include "wx/wxprec.h"
 
#ifdef __BORLANDC__
    #pragma hdrstop
#endif
 
#ifndef WX_PRECOMP
    #include "wx/wx.h"
    #include "wx/mdi.h"
#endif
 
#include "main.h"
#include "windowsComposition.h"
 
IMPLEMENT_APP(mainApp);
 
MainFrame *frame = (MainFrame *) NULL;
 
BEGIN_EVENT_TABLE(MainFrame, wxMDIParentFrame)
    EVT_MENU(1, MainFrame::OnNewWindow)
END_EVENT_TABLE()
 
MainFrame::MainFrame(wxWindow *parent,
                 const wxWindowID id,
                 const wxString& title,
                 const wxPoint& pos,
                 const wxSize& size,
                 const long style)
       : wxMDIParentFrame(parent, id, title, pos, size, style)
{
 
}
 
void MainFrame::OnNewWindow(wxCommandEvent& WXUNUSED(event) )
{
    winComposition *subframe = new winComposition(frame, _T("Canvas Frame"));
}
 
bool mainApp::OnInit()
{
    frame = new MainFrame((wxFrame *)NULL, wxID_ANY, _T("YAPE Music"),
                        wxDefaultPosition, wxSize(500, 400),
                        wxDEFAULT_FRAME_STYLE | wxHSCROLL | wxVSCROLL);
 
    wxMenu *file_menu = new wxMenu;
    file_menu->Append(1, _T("&New window\tCtrl-N"), _T("Create a new child window"));
 
    wxMenuBar *menu_bar = new wxMenuBar;
    menu_bar->Append(file_menu, _T("&File"));
 
    frame->SetMenuBar(menu_bar);
    frame->Show();
    return true;
}


main.h

Code wxWidgets:

 
class MainFrame : public wxMDIParentFrame
{
    public:
        MainFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
            const wxPoint& pos, const wxSize& size, const long style);
 
        void OnNewWindow(wxCommandEvent& event);
 
        DECLARE_EVENT_TABLE()
};
 
class mainApp : public wxApp
{
    public:
    virtual bool OnInit();
};
 
 
DECLARE_APP(mainApp);
 


windowsComposition.cpp

Code wxWidgets:

#include "windowsComposition.h"
 
winComposition::winComposition(wxMDIParentFrame *parent, const wxString& title)
       : wxMDIChildFrame(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize,
                         wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE)
{
    SetSizeHints(100, 100);
}
 
winComposition::~winComposition()
{
 
}
 


windowsComposition.h

Code wxWidgets:

#include <wx/wx.h>
 
class winComposition : public wxMDIChildFrame
{
    public:
        winComposition (wxMDIParentFrame *parent, const wxString& title);
        ~winComposition();
 
    DECLARE_EVENT_TABLE()
};


merci d'avance.

Dernière modification par Xaviou (03-06-2010 17:25:32)

03-06-2010 12:28:09  Re: Problème de linkage #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

L'erreur que tu obtiens vient du fait que tu déclares une table d'événements pour ta classe winComposition, mais tu ne la définis jamais.
À aucun moment on ne trouve de code ressemblant à :

Code wxWidgets:

BEGIN_EVENT_TABLE(winComposition, wxMDIChildFrame)
END_EVENT_TABLE()


A partir du moment où tu mets la macro DECLARE_EVENT_TABLE() dans la déclaration de la classe, il faut obligatoirement mettre le code ci-dessus dans le fichier cpp, même si tu ne mets rien entre les deux macros BEGIN_EVENT_TABLE et END_EVENT_TABLE

Normalement, ça devrait résoudre ton problème

@+
Xav'

P.S: N'hésites pas à utiliser la balise code quand tu postes des morceaux de code, c'est plus lisible

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
03-06-2010 14:30:28  Re: Problème de linkage #3
yannp (Membre)
Inscrit le : 02-06-2010
Messages: 61
Snippets: 0
Tutoriels: 0
Hors ligne
Merci à toi !!! Génial ça marche !!!!

Encore un grand MERCI !!!!
03-06-2010 17:23:29  Re: Problème de linkage #4
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
N'oublie pas de marquer la discussion comme résolue en cliquant sur l'icône verte à droite de la réponse ;)

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
03-06-2010 18:42:43  Re: Problème de linkage #5
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
J'ai oublié de préciser : pour passer une discussion en mode résolu, il faut cliquer sur l'icône en vert se trouvant au niveau de la (ou des) réponse(s) ayant aidé à résoudre le problème, pas au niveau de la question (sauf si la réponse s'y trouve, bien entendu ;) ).
J'ai fait la correction.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Problème de linkage