Virtuelle Methoden, die von zwei Klassen geerbt wurden, können nicht aufgerufen werden

ostpczk

Ich habe versucht, eine Klasse zu erstellen, die von einer anderen Klasse erbt, die wiederum nur mit rein virtuellen Methoden von einer anderen, abstrakten Klasse erbt:

// objects.cpp:

class Object
{
public:
    virtual void generate() = 0;
    virtual ~Object() = 0;
};

class Vehicle: public Object
{
    virtual void generate() = 0;
protected:
  // Attributes inherited by Bike objects.
public:
    virtual ~Vehicle() = 0;

};

class Bike: public Vehicle
{
private:
  // Attributes specific to Bike class objects.
public:
    void generate()
    {
      // Takes the data from the object being called on and writes them to a file.
    }
    Bike()
    {
      // Declaring a bike launches the constructor which randomly generates and assigns data.
    }
    ~Bike() {}

};
void trigger_generation(Object & opoint)
{
    opoint.generate();
}

Hier ist die Header-Datei:

// objects.hpp

#ifndef OBJECTS_H
#define OBJECTS_H

class Object
{
public:
    virtual void generate();
    virtual ~Object();
};

class Vehicle: public Object
{
protected:
  // Attributes inherited by Bike objects.
public:
    virtual ~Vehicle();

};

class Bike: public Vehicle
{
private:
  // Attributes specific to Bike class objects.
public:
    void generate();
    Bike();
    ~Bike();
};

void trigger_generation(Object & opoint);

#endif // OBJECTS_H

Und dann führe ich in der Datei main.cpp die Methode generate() für ein Bike-Klassenobjekt aus:

// main.cpp
#include "objects.hpp"

int main(int argc, char *argv[])
{

    Bike itsactuallyabicycle;
    trigger_generation(itsactuallyabicycle);

}

Am Ende habe ich diese Fehler:
main.cpp:(.text+0x27): undefined reference to `Bike::Bike()'
main.cpp:(.text+0x3f): undefined reference to `Bike::~Bike()'
main.cpp:(.text+0x64): undefined reference to `Bike::~Bike()'

Was verursacht diese Fehler und wie kann ich sie umgehen, damit die Methoden der Bike-Klasse normal aufgerufen werden können?

EDIT: Kompiliert mit g++ main.cpp objects.hpp objects.cpp

Abhijit Pritam Dutta

Ein rein virtueller Destruktor ist in C++ zulässig, muss jedoch einen Körper haben.

 Object::~Object()
 {

 }

und

 Vehicle::~Vehicle()
 {

 }

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Methoden für Objekte, die von der Vorlage übergeben wurden, können nicht aufgerufen werden

Zwei Methoden, die von einer Methode in der Klasse geerbt wurden, unterscheiden sich in Instanzen, nicht wahr?

Es können nicht zwei Arrays von Object in Jquery verglichen werden, die mit unterschiedlichen Methoden ohne Erfolg ausprobiert wurden

Die Eigenschaften von zwei separaten Klassen können nicht aus der TestNG-Klasse -> java.lang.NullPointerException aufgerufen werden

Einige Methoden in der Schnittstelle können nicht aufgerufen werden, nachdem die Objekte in Java instanziiert wurden

Die Methoden können nicht mit Konfluenzobjekten aufgerufen werden: - "Das Objekt 'NoneType' ist nicht abonnierbar."

Zugriffsmitglied einer nicht virtuellen Basisklasse, die von zwei verschiedenen Klassen geerbt wurde

Was bedeutet "Die Methoden und Konstruktoren von Objekten, die von einem Klassenladeprogramm erstellt wurden, können auf andere Klassen verweisen"?

Methoden, die in List <Objekt> in c # hinzugefügt wurden, können nicht abgerufen werden

Methoden können nicht innerhalb von catch oder dann eines Promise-Aufrufs aufgerufen werden

Methoden auf Registerkarten können vor der Initialisierung nicht aufgerufen werden; versucht, die Methode 'load' aufzurufen

Die Methoden der übergeordneten Klasse können in JavaScript nicht aufgerufen werden

Es gibt 8 spezielle Methoden im Tupel, die nicht von `object` und `type . geerbt werden

Können Methoden, die innerhalb von Filtermethoden aufgerufen werden, den Filter selbst aufrufen?

Die Methoden von iOS Custom View werden nicht aufgerufen

ASM: Die Methoden von MethodVisitor werden nicht vom ClassReader aufgerufen

Android - In ViewModel definierte Methoden können nicht aufgerufen werden

Mehrere get-Methoden können nicht ordnungsgemäß aufgerufen werden

Methoden aus anderen Ansichten in AndroidStudio können nicht aufgerufen werden

Methoden in objektorientierten Paradigmen können von den Methoden mit derselben Signatur in den ererbenden Klassen überschrieben werden. Variablen können dies jedoch nicht. Warum?

Die meisten abgeleiteten Klassen können nicht kompiliert werden, wenn die virtuelle Funktion nicht implementiert ist. Sie können jedoch kompiliert werden, wenn eine Basisklasse die virtuelle Funktion nicht implementiert

Die asynchronen Funktionen von Javascript können nicht von Nashorn Java aufgerufen werden

UICollectionView - Warum werden die Methoden nicht aufgerufen?

Die Verwendung der Delegatendeklaration in Add-Type: d C # -Code führt dazu, dass Methoden nicht aufgerufen werden können

Fehler: Methoden auf Registerkarten können vor der Initialisierung nicht aufgerufen werden; versucht, die Methode 'Option' aufzurufen

Ruby-Methoden, die oben in den Klassen aufgerufen werden

Zusammenführen von Hintergründen, die von verschiedenen Klassen geerbt wurden

Speichern von Klassen, die von einer Klassenvorlage geerbt wurden, in einem C ++ - Vektor

Bei Verwendung von gradle 'java-library' können die Klassen in der Bibliothek nicht referenziert werden

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv