Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Andere GUIs - Qt, GTK+, wxWidgets ::  [wxWidgets] [gelöst] neues Event endet in Fehler     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Lurnon
Mitglied

Benutzerprofil
Anmeldungsdatum: 21.05.2008
Beiträge: 41
Beitrag Lurnon Mitglied 18:47:24 28.12.2008   Titel:   [wxWidgets] [gelöst] neues Event endet in Fehler            Zitieren

Hallöle,
ich wollte ein Event für wxWidgets schreiben. Der Code sieht folgendermaßen aus (viel aus einem Tutorial übernommen):

Ereignisse.h
C++:
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
#include <wx/wx.h>
 
DECLARE_EVENT_TYPE(MeinCommandEreignis,-1)
class MeinEreignis: wxCommandEvent
{
public:
    MeinEreignis(wxEventType commandType = MeinCommandEreignis, int id = 0)
        : wxCommandEvent(commandType, id){};
 
    MeinEreignis(const MeinEreignis &event):wxCommandEvent(event)
            { this->Aendere_Wert(event.Zeige_Wert());};
;
 
    virtual wxEvent* Clone() const { return new MeinEreignis(*this); }
 
    unsigned char Zeige_Wert() const {return m_Wert;};
    void Aendere_Wert(const unsigned char &u_Wert) {m_Wert=u_Wert;};
private:
    unsigned char m_Wert;
 
};
 
 
typedef void (wxEvtHandler::*MeinEreignisFunction)(MeinEreignis &);
 
// This #define simplifies the one below, and makes the syntax less
// ugly if you want to use Connect() instead of an event table.
#define MeinEreignisHandler(func)                                         \
    (wxObjectEventFunction)(wxEventFunction)(wxCommandEventFunction)\
    wxStaticCastEvent(MeinEreignisFunction, &func)
 
// Define the event table entry. Yes, it really *does* end in a comma.
#define EVT_MEINEREIGNIS(id, fn)                                            \
    DECLARE_EVENT_TABLE_ENTRY( MeinCommandEreignis, id, wxID_ANY,  \
    (wxObjectEventFunction)(wxEventFunction)                     \
    (wxCommandEventFunction) wxStaticCastEvent(                  \
    MeinEreignisFunction, &fn ), (wxObject*) NULL ),


die Ereignisse.cpp
C++:
#include "Ereignisse.h"
DEFINE_EVENT_TYPE(MeinCommandEreignis)


Benutzt werden soll das Event in einer anderen Quellcodedatei (gleiches Projekt)

die Ereignisse.h ist per Include eingebunden

Will ich mein Event nun benutzen (über Eventtabelle der Fensterklasse)
kommt es zu folgendem Build-fehler:

Zitat:
||=== Editor, Release ===|
obj\Release\Elemente.o:Elemente.cpp:(.text+0xe737)||undefined reference to `__imp__MeinCommandEreignis'|
||=== Build finished: 1 errors, 0 warnings ===|


Achja, ich benutze Code::Blocks.

Kann mir jemand helfen?
Was muss ich anders machen und wieso?

Gruß,
Lurnon

edit: Lösung wxWidgets nicht als DLL sondern als Lib einbinden (also shared=0 beim build)


Zuletzt bearbeitet von Lurnon am 11:21:13 10.01.2009, insgesamt 1-mal bearbeitet
scorcher24@arbyte
Unregistrierter




Beitrag scorcher24@arbyte Unregistrierter 07:27:35 29.12.2008   Titel:              Zitieren

Code:
MeinEreignis(wxEventType commandType = MeinCommandEreignis, int id = 0)

Du erzeugt hier quasi einen Standard-Konstruktor, bzw dessen Signatur und der Linker sucht vergeblich nach dem selbigen, da es MeinEreignis() nicht gibt. Ist geraten, aber es scheint ein kleiner Bug zu sein, mit dem M$-Compiler funktionieren solche Konstrukte.
Probier das hier:
Code:
MeinEreignis() : wxCommandEvent(MeinCommandEreignis, 0){};
 
MeinEreignis(wxEventType commandType, int id = 0)
        : wxCommandEvent(commandType, id){};

So sollte es gehen.
rya.
Lurnon
Mitglied

Benutzerprofil
Anmeldungsdatum: 21.05.2008
Beiträge: 41
Beitrag Lurnon Mitglied 22:17:31 29.12.2008   Titel:              Zitieren

Leider hat das nichts gebracht, dennoch danke.

Hab jetzt aber festgestellt, wenn ich :
C++:
DEFINE_EVENT_TYPE(MeinCommandEreignis)

nicht in Ereignisse.cpp schreibe, sondern in meine "Haupt-"Quellcodedatei, in der ich mein Ereignis abfangen will, schreibe, kommt kein Fehler.
Doch bei Standardevents muss dieses MACRO ja auch nicht in die "Haupt-"Quellcodedatei, also muss das doch irgendwie mgl. sein, das in die Ereignisse.cpp zu bringen. Hat da jemand ne Idee?


Gruß
Lurnon


Zuletzt bearbeitet von Lurnon am 22:18:41 29.12.2008, insgesamt 1-mal bearbeitet
Lurnon
Mitglied

Benutzerprofil
Anmeldungsdatum: 21.05.2008
Beiträge: 41
Beitrag Lurnon Mitglied 19:48:37 30.12.2008   Titel:              Zitieren

Wieder was entdeckt, bekomme den gleichen Fehler wenn ich phlox81s Codebeispiel aus dem "wxWidgets Tutorial Part II: Spiel mit mir" kompilieren will.
c++.de :: Andere GUIs - Qt, GTK+, wxWidgets ::  [wxWidgets] [gelöst] neues Event endet in Fehler   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.