virtual class in Funktion übergeben

  • Themenstarter Themenstarter elm
  • Beginndatum Beginndatum
E

elm

Hallo, ich habe folgende 2 Klassen mit abstracten Interfaces.
Fernbedienung(==>IFB) soll dabei einen vector aus Elementen Taste(==> IKey) enthalten

Code:
class IKey 
{
    public:
         virtual std::string get_name()=0;
        virtual int set_name(std::string name)=0;

        virtual bool Key::operator==(const IKey &b)=0;  
        virtual bool Key::operator!=(const IKey &b) =0;
};

class IFB
{
   // std::vector<Taste> wird in Klasse Fernbedienung deklariert.
    virtual int add_Taste(IKey taste);
};

Beim erstellen meckert der Compiler in der Zeile virtual int add_Taste(Key taste); "Key:Instance von abstrakter Klasse kann nicht erstellt werden"

Wie wird sowas richtig implementiert
 
Man kann grundsätzlich keine Instanzen von abstrakten Klassen erstellen. Bei einer abstrakten Klasse ist immer mindestens
eine virtual-Funktion, der 0 zugewiesen ist. Du musst zuerst eine Klasse von IKey ableiten.
C++:
class Key : public IKey
{
  public:
    std::string get_name();  // Diese Funktionen dann definieren!!
    int set_name (std::string name);
    ...
};

Ich würde dir empfehlen using namespace std> zu verwenden.
 
Zuletzt bearbeitet:
Du brauchst in der Klasse IKey evtl noch einen Konstrukter mit "0" als Funktionsrumpf:
C++:
class IKey{
public:
IKey() = 0;
...
}
Oder die Klasse IKey muss virtual sein.

[EDIT]
"using namespace std" funktioniert bei manchen selbst definierten Methoden nicht.
 
Zuletzt bearbeitet von einem Moderator:
Du kannst zwar keine Instanzen von abstrakten Zeiger haben, aber durchaus Zeiger auf diese Klasse (die aber eigentlich Zeiger auf die Implementationen sind)

Code:
class IFB
{
   // std::vector<Taste> wird in Klasse Fernbedienung deklariert.
    virtual int add_Taste(IKey* taste);
};
 
@Cromon: Heißt das, wenn man jetzt eine Klasse von IKey ableitet und darin die Funktionen deklariert, zeigt dieser Zeiger dann auf diese Funktionen?
 
die IKey als virtual zu deklarien hat nichts gebracht...

Hmm... wenn ich immer erst eine Instanz erstellen muss, wirds wohl nicht so funktionieren wie ichs mir gedacht hab..

Der Sinn hinter der Sache ist eigentlich, eine DLL zu erstellen, die u.a. diese beiden Klassen exportiert.
Damit später niemand vergisst die funktionen zu implementieren wollte ich sie gerne als Interface definieren.
 
die IKey als virtual zu deklarien hat nichts gebracht...

Hmm... wenn ich immer erst eine Instanz erstellen muss, wirds wohl nicht so funktionieren wie ichs mir gedacht hab..

Der Sinn hinter der Sache ist eigentlich, eine DLL zu erstellen, die u.a. diese beiden Klassen exportiert.
Damit später niemand vergisst die funktionen zu implementieren wollte ich sie gerne als Interface definieren.
Was hindert dich denn an deinem Vorhaben?
Welche Instanz meinst du denn? Für das Interface brauchst du eigentlich keine.
 
Oben genanntes Problem :)
Ich kann innerhalb der DLL keine Funktionsdefinition ala int add_Taste(IKey key); machen.
und die realisierende Klasse(==Taste) des Interfaces will ich erst außerhalb der DLL initialisieren.

Bzw. am benutzen von Zeigern hindert mich, dass da ziemlich viel an getesteten Code rumgebastelt werden müsste... :)


Oder steh ich grad nur total aufm Schlauch
 
Zurück