Ich weiß, dass Fragen zu diesem Fehler wiederholt gestellt wurden, jedoch scheint keine der vorherigen Antworten mein Problem zu lösen."Zuordnung eines Objekts der abstrakten Klassenart" Fehler, obwohl alle Funktionen Implementierungen haben
Ich habe eine reine abstrakte Klasse ITile
:
class ITile {
public:
virtual ~ITile() {}
virtual void display() = 0;
virtual bool isWalkable() = 0;
virtual bool isGoal() = 0;
};
Und drei Unterklassen, die alle diese Funktionen implementieren, wie so:
Floor.h
#include "ITile.h"
class Floor : public ITile {
public:
Floor();
virtual ~Floor();
virtual void display() override;
virtual bool isWalkable() override;
virtual bool isGoal() override;
};
Floor.cpp
#include "Floor.h"
#include <iostream>
using namespace std;
Floor::Floor() {}
Floor::~Floor() {}
void Floor::display() {
cout << " ";
}
bool Floor::isWalkable() {
return true;
}
bool Floor::isGoal() {
return false;
}
Beim Versuch, das gesamte Projekt, das ich die folgende Ausgabe zu kompilieren:
g++ -std=c++0x -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/main.d" -MT"src/main.d" -o "src/main.o" "../src/main.cpp"
In file included from ../src/main.cpp:1:
In file included from ../src/board.h:1:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/vector:265:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/__bit_reference:15:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:627:
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/memory:1641:31: error: allocating an object of abstract class type 'ITile'
::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);
[...]
... von einem Haufen von Noten gefolgt. Aber das Problem ist, ich denke, der Fehler in der letzten Zeile oben.
Also, was genau sind diese algorithm
, memory
Dateien und so weiter? Wie kann ich diesen Fehler beheben?
Ich benutze Eclipse Luna mit dem C/C++ - Plugin auf Mac OS X (Mavericks) mit den Developer Command Line Tools. Weitere Informationen gerne auf Anfrage gegeben.
Vielen Dank im Voraus!
Sie ging ein wenig zu minimal in Ihrem Beispiel. Bitte poste ein [mcve] – NathanOliver
@NathanOliver: Es ist nicht so sehr, dass es zu minimal ist. Es ist, dass es unvollständig ist.Er vermisst die "Hauptfunktion", die alles miteinander verbindet. Derjenige, der fast sicher einen 'Vektor' verwendet. –
@NathanOliver Nun, ich selbst hasse es, die kompletten Projekte anderer Leute zu lesen. Ich dachte, das könnte genug sein, damit ein Profi meinen Fehler findet. Was sollte ich sonst noch posten? –