Fehler: "is inaccessible ... within this context"
-
Hallo Leute,
ich arbeite gerade mit einer nicht von mir geschriebenen Bibliothek und habe einige Probleme beim Kompilieren.
Mein System: Windows 7 64bit, minGW, WXWidgets 2.9.1
g++ -I . -DNOSCANFW -g -Wall `wx-config --cxxflags` -fno-strict-aliasing -c vi sual/ImageWindow.cpp -o some_machine/objvis/ImageWindow.o C:/MinGW/include/wx-2.9/wx/event.h: In member function 'void ice::iceImageWindow::OnChar(wxKeyEvent&)': C:/MinGW/include/wx-2.9/wx/event.h:2997:18: error: 'virtual bool wxEvtHandler::ProcessEvent(wxEvent&)' is inaccessible visual/ImageWindow.cpp:266:54: error: within this contextDiese Fehlermeldung erhalte ich, wenn ich versuche ImageWindow.cpp zu kompilieren. Ich kann damit nicht viel anfangen. Wenn ich mir die Klasse anschaue, dann scheint dort alles korrekt.
Hier mal noch die ImageWindow.cpp:
... void iceImageWindow::OnChar(wxKeyEvent& KeyEvent) { // processes key events are: plus and minus key // for zooming (the rest will do the scroll helper class for us) if (KeyEvent.GetKeyCode() == '>') { // ZoomFactor -1 is essentially the same as ZoomFactor +1, so it can be skipped if (ZoomFactor == -2) DoZoom(1); else DoZoom(ZoomFactor + 1); return; } if (KeyEvent.GetKeyCode() == '<') { // ZoomFactor -1 is essentially the same as ZoomFactor +1, so it can be skipped if (ZoomFactor == 1) DoZoom(-2); else DoZoom(ZoomFactor - 1); return; } if (KeyEvent.GetKeyCode() == '.') { DoZoom(1); return; } // if there was any other key pressed, we don't care and pass it through to the console // window wxGetApp().GetConsoleWin()->ProcessEvent(KeyEvent); } ...und event.h:
... class WXDLLIMPEXP_BASE wxEvtHandler : public wxObject , public wxTrackable { public: wxEvtHandler(); virtual ~wxEvtHandler(); // Event handler chain // ------------------- wxEvtHandler *GetNextHandler() const { return m_nextHandler; } wxEvtHandler *GetPreviousHandler() const { return m_previousHandler; } virtual void SetNextHandler(wxEvtHandler *handler) { m_nextHandler = handler; } virtual void SetPreviousHandler(wxEvtHandler *handler) { m_previousHandler = handler; } void SetEvtHandlerEnabled(bool enabled) { m_enabled = enabled; } bool GetEvtHandlerEnabled() const { return m_enabled; } void Unlink(); bool IsUnlinked() const; // Event queuing and processing // ---------------------------- // Process an event right now: this can only be called from the main // thread, use QueueEvent() for scheduling the events for // processing from other threads. virtual bool ProcessEvent(wxEvent& event); // Process an event by calling ProcessEvent and handling any exceptions // thrown by event handlers. It's mostly useful when processing wx events // when called from C code (e.g. in GTK+ callback) when the exception // wouldn't correctly propagate to wxEventLoop. bool SafelyProcessEvent(wxEvent& event); // NOTE: uses ProcessEvent() ...Denke, dass sich das schlecht überblicken lässt, aber evtl. habt jemand einfach einen Rat und das Problem liegt nicht tief vergraben.

MfG
exbs
-
Was für einen Typen gibt denn
wxGetApp().GetConsoleWin()zurück?
-
Wenn ich die Dokumentation und den Code richtig verstehe. Dann gibt dieser Befehl ein Pointer auf die Konsole zurück. Zuerst gibt wxGetApp() das "aktuelle" Programm, und das wiederum ist eine Konsole.
//! Returns the pointer to the console window.
-
EXBS schrieb:
Wenn ich die Dokumentation und den Code richtig verstehe. Dann gibt dieser Befehl ein Pointer auf die Konsole zurück. Zuerst gibt wxGetApp() das "aktuelle" Programm, und das wiederum ist eine Konsole.
//! Returns the pointer to the console window.
Ich meine nicht die Semantik des Objekts die zurückgegeben wird, sondern die exakte Syntax.
Semantik: Das was mit einem Ausdruck gemeint ist.
Syntax: Die "Grammatik" eines Ausdrucks. Hier: Der Datentyp den der Compiler sieht.
-
getConsoleWin()gibt einen Pointer auf einConsoleWinzurück. Dieses ist vonwxWindowundiceThreadCommHelperabgeleitet.Noch eine kleine Frage nebenbei...
class iceImageManager:private wxEvtHandler, private iceThreadCommHelperWas bedeutet an dieser Stelle das
private? Sry, wenn ich blöde Fragen stelle, aber ich habe bisher fast nur mit Java programmiert und kenne mich in C++ nicht so gut aus.MfG
-
EXBS schrieb:
getConsoleWin()gibt einen Pointer auf einConsoleWinzurück. Dieses ist vonwxWindowundiceThreadCommHelperabgeleitet.Und wie ist die letztendliche Beziehung zu wxEvtHandler?
Noch eine kleine Frage nebenbei...
class iceImageManager:private wxEvtHandler, private iceThreadCommHelperWas bedeutet an dieser Stelle das
private? Sry, wenn ich blöde Fragen stelle, aber ich habe bisher fast nur mit Java programmiert und kenne mich in C++ nicht so gut aus.Dies ist vermutlich der Grund für den Fehler:
Ich kann es nicht in Java-Sprech ausdrücken, da es dort private-Vererbung nicht gibt. private-Vererbung ist eine "hat ein"-Beziehung zwischen Objekten. Ein bisschen mehr technischer Hintergrund ist hier:
http://www.parashift.com/c++-faq-lite/private-inheritance.html
Vermutlich ist da in dem Klassengeflecht die Methode die du aufrufen willst irgendwo private-vererbt und daher von ConsoleWin nicht aufrufbar.
-
SeppJ schrieb:
Und wie ist die letztendliche Beziehung zu wxEvtHandler?
Das habe ich noch nicht heraus gefunden. Ich habe mir die Klassenbeziehungen aufgezeichnet, aber es erben beide (sowohl
wxApp, als auch ConsoleWin) nicht vonwxEvtHandler. Oder (was wahrscheinlich ist) es mir nicht ersichtlich ;).Es handelt sich hierbei um ein Projekt für die Uni. Ich kann leider erst am Montag meinen Ansprechpartner für diese Bibliothek erreichen. Mache mich dann wieder an die Arbeit und werde den Thread aktualisieren.
Verwunderlich ist, dass es mit wxWidgets Version 2.8.11 wunderbar geklappt hat (zumindest das Kompilieren). Dort gab es dann allerdings andere Fehler. Deshalb jetzt der Versuch mit der neueren Version.
Noch eine Frage. Was bedeutet das "
->" ? Heißt es, dass ich auf eine Objektmethode zugreife ?MfG
-
EXBS schrieb:
Noch eine Frage. Was bedeutet das "
->" ? Heißt es, dass ich auf eine Objektmethode zugreife ?p->foo();ist Abkürzung für(*p).foo();
Das sind aber wichtigste Sprachgrundlagen.