es kann kein Objekt des abstrakten Typs belegt werden

Schnelle objektorientierte, kompilierende Programmiersprache.
Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

es kann kein Objekt des abstrakten Typs belegt werden

Beitrag von Kmitska » Sa Jun 23, 2012 11:36 am

Hallo Leute,

mein Compiler spuckt so einen Fehler aus:
es kann kein Objekt des abstrakten Typs »wxGridCellEditor« belegt werden
Kann mir jemand sagen, wie wxGridCellEditor verwenden kann?

Ich verwende es im Moment so:
void listWindow::addToGrid( wxString link ){
...
wxGridCellEditor* cell = new wxGridCellEditor();
gridList->SetCellEditor(0,1, cell);
...
}

Und die ganzen Fehlermeldungen sind hier:
/home/yasin/Programming/C++/Projects/VehClient/listWindow.cpp|276|Fehler: es kann kein Objekt des abstrakten Typs »wxGridCellEditor« belegt werden|
/usr/include/wx-2.8/wx/generic/grid.h|290|Anmerkung: denn die folgenden virtuellen Funktionen sind rein innerhalb »wxGridCellEditor«:|
/usr/include/wx-2.8/wx/generic/grid.h|303|Anmerkung: virtual void wxGridCellEditor::Create(wxWindow*, wxWindowID, wxEvtHandler*)|
/usr/include/wx-2.8/wx/generic/grid.h|320|Anmerkung: virtual void wxGridCellEditor::BeginEdit(int, int, wxGrid*)|
/usr/include/wx-2.8/wx/generic/grid.h|324|Anmerkung: virtual bool wxGridCellEditor::EndEdit(int, int, wxGrid*)|
/usr/include/wx-2.8/wx/generic/grid.h|327|Anmerkung: virtual void wxGridCellEditor::Reset()|
/usr/include/wx-2.8/wx/generic/grid.h|355|Anmerkung: virtual wxGridCellEditor* wxGridCellEditor::Clone() const|
/usr/include/wx-2.8/wx/generic/grid.h|358|Anmerkung: virtual wxString wxGridCellEditor::GetValue() const|
||=== Build finished: 8 errors, 0 warnings ===|
Danke im Voraus.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: es kann kein Objekt des abstrakten Typs belegt werden

Beitrag von cloidnerux » Sa Jun 23, 2012 11:59 am

Hallo Leute,

mein Compiler spuckt so einen Fehler aus:
es kann kein Objekt des abstrakten Typs »wxGridCellEditor« belegt werden
Kann mir jemand sagen, wie wxGridCellEditor verwenden kann?
Es handelt sich anscheinend bei "wxGridCellEditor" um eine Abstrakte Klasse, also eine Klasse die du nicht Instanzieren kannst. Folglich brauchst du eine Klasse, die von wxGridCellEditor erbt oder du musst dir selber eine schreiben, die das macht.
Da ich mich mit wxWidgets nicht auskenne, weiß ich nicht, was der "editor" machen soll und ob es da schon irgendetwas fertiges gibt.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Re: es kann kein Objekt des abstrakten Typs belegt werden

Beitrag von Kmitska » Sa Jun 23, 2012 1:15 pm

Also, hier ist nochmal die Doku.-Seite: http://docs.wxwidgets.org/stable/wx_wxg ... celleditor

Heißt das jetzt, dass ich eine Klasse ableiten soll, und wenn ja wie würde sowas damit aussehen?

Was ich gemacht habe:
class test : public wxGridCellEditor
{
public:
test();
~test();
};
Und bei den Fehler war ja so ein Teil dabei:
/usr/include/wx-2.8/wx/generic/grid.h|303|Anmerkung: virtual void wxGridCellEditor::Create(wxWindow*, wxWindowID, wxEvtHandler*)|
/usr/include/wx-2.8/wx/generic/grid.h|320|Anmerkung: virtual void wxGridCellEditor::BeginEdit(int, int, wxGrid*)|
/usr/include/wx-2.8/wx/generic/grid.h|324|Anmerkung: virtual bool wxGridCellEditor::EndEdit(int, int, wxGrid*)|
/usr/include/wx-2.8/wx/generic/grid.h|327|Anmerkung: virtual void wxGridCellEditor::Reset()|
Muss ich jetzt also die Methoden nochmal definieren?

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: es kann kein Objekt des abstrakten Typs belegt werden

Beitrag von fat-lobyte » Sa Jun 23, 2012 1:32 pm

Ja, das ist das Prinzip von wxWidgets. Du leitest eine bereits vorhandene Klasse ab, und Überschreibst bestimmte Methoden, um auf Ereignisse zu reagieren wie du es wünscht.

Sieh dir mal diese Seite an: http://docs.wxwidgets.org/trunk/classwx ... ub-methods

Dort stehen alle methoden, die du Überschreiben musst mit "virtual" am Anfang und "= 0" am Ende.
Haters gonna hate, potatoes gonna potate.

hofian
Beiträge: 62
Registriert: Do Sep 24, 2009 6:59 pm

Re: es kann kein Objekt des abstrakten Typs belegt werden

Beitrag von hofian » Sa Jun 23, 2012 1:37 pm

@Kmitska: ...oder du schaust in der Doku in die "See also" Sektion und benutzt eine bereits vorhandene wxGridCellEditor-Implementierung deiner Wahl.

Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Re: es kann kein Objekt des abstrakten Typs belegt werden

Beitrag von Kmitska » Sa Jun 23, 2012 6:33 pm

Emm... ok...

Habe nun dies ausprobiert:

Code: Alles auswählen

class gridCell : public wxGridCellEditor
{
    public:
        gridCell();
        ~gridCell();
        void Create (wxWindow *parent, wxWindowID id, wxEvtHandler *evtHandler);
        void ApplyEdit (int row, int col, wxGrid *grid);
};
Doch ich bekomme immernoch den gleichen Fehler...

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8861
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: es kann kein Objekt des abstrakten Typs belegt werden

Beitrag von Xin » Sa Jun 23, 2012 6:40 pm

Und hast Du die Create-Funktion dann auch im C++ File implementiert und das C++ File dann mitkompiliert?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Re: es kann kein Objekt des abstrakten Typs belegt werden

Beitrag von Kmitska » Sa Jun 23, 2012 6:46 pm

Alsoo, hier mal die Source:

.h-Datei:

Code: Alles auswählen

#ifndef WXGRIDCELL_H_INCLUDED
#define WXGRIDCELL_H_INCLUDED

#include <wx/wx.h>
#include <wx/grid.h>

class gridCell : public wxGridCellEditor
{
    public:
        gridCell();
        ~gridCell();
        void Create (wxWindow *parent, wxWindowID id, wxEvtHandler *evtHandler);
        void ApplyEdit (int row, int col, wxGrid *grid);
};

#endif // WXGRIDCELL_H_INCLUDED
.cpp-Datei:

Code: Alles auswählen

#include "wxGridCell.h"

gridCell::gridCell(){

}

gridCell::~gridCell(){
}

void gridCell::Create (wxWindow *parent, wxWindowID id, wxEvtHandler *evtHandler)
{

}

void gridCell::ApplyEdit (int row, int col, wxGrid *grid)
{

}
Fehler:

Code: Alles auswählen

/home/yasin/Programming/C++/Projects/VehClient/listWindow.cpp|281|Fehler: es kann kein Objekt des abstrakten Typs »gridCell« belegt werden|
/home/yasin/Programming/C++/Projects/VehClient/wxGridCell.h|7|Anmerkung:   denn die folgenden virtuellen Funktionen sind rein innerhalb »gridCell«:|
/usr/include/wx-2.8/wx/generic/grid.h|320|Anmerkung: 	virtual void wxGridCellEditor::BeginEdit(int, int, wxGrid*)|
/usr/include/wx-2.8/wx/generic/grid.h|324|Anmerkung: 	virtual bool wxGridCellEditor::EndEdit(int, int, wxGrid*)|
/usr/include/wx-2.8/wx/generic/grid.h|327|Anmerkung: 	virtual void wxGridCellEditor::Reset()|
/usr/include/wx-2.8/wx/generic/grid.h|355|Anmerkung: 	virtual wxGridCellEditor* wxGridCellEditor::Clone() const|
/usr/include/wx-2.8/wx/generic/grid.h|358|Anmerkung: 	virtual wxString wxGridCellEditor::GetValue() const|
/home/yasin/Programming/C++/Projects/VehClient/listWindow.cpp|281|Warnung: Variable »cell« wird nicht verwendet [-Wunused-variable]|
||=== Build finished: 8 errors, 0 warnings ===|

Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Re: es kann kein Objekt des abstrakten Typs belegt werden

Beitrag von Kmitska » Sa Jun 23, 2012 6:51 pm

Es hat sich geklärt, ich musst alle diese Funktionen übernehmen. :)

Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Re: es kann kein Objekt des abstrakten Typs belegt werden

Beitrag von Kmitska » Sa Jun 23, 2012 7:05 pm

Hier noch ein Problem:

Code: Alles auswählen

gridCell* cell = new gridCell();
cell.Create(this, wxID_ANY, NULL);
Nachdem ich das tippe, bekomme ich folgende Fehlermeldung:

Code: Alles auswählen

/home/yasin/Programming/C++/Projects/VehClient/listWindow.cpp|282|Fehler: Abfrage des Elementes »Create« in »cell«, das vom Nicht-Klassentyp »gridCell*« ist|
||=== Build finished: 1 errors, 0 warnings ===|
Aber ich hab doch das definiert...

Antworten