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
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.
Lass mich ein paar Worte sagen