kann nicht deklarieren Sie die variable ‘ werden von abstrakten Typ ‘
EDIT: Nachdem die Ausgaben ein wenig Zeit den code zu verstehen, ich schrieb, ich weiß noch nicht, was ist falsch mit ihm. Dies ist die Basisklasse, von der ich abgeleitet meiner Klasse:
///ContactResultCallback is used to report contact points
struct ContactResultCallback
{
short int m_collisionFilterGroup;
short int m_collisionFilterMask;
ContactResultCallback()
:m_collisionFilterGroup(btBroadphaseProxy::DefaultFilter),
m_collisionFilterMask(btBroadphaseProxy::AllFilter)
{
}
virtual ~ContactResultCallback()
{
}
virtual bool needsCollision(btBroadphaseProxy* proxy0) const
{
bool collides = (proxy0->m_collisionFilterGroup & m_collisionFilterMask) != 0;
collides = collides && (m_collisionFilterGroup & proxy0->m_collisionFilterMask);
return collides;
}
virtual btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap,int partId0,int index0,const btCollisionObjectWrapper* colObj1Wrap,int partId1,int index1) = 0;
};
Nun, hier ist meine abgeleitete Klasse:
class DisablePairCollision : public btCollisionWorld::ContactResultCallback
{
public:
virtual btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObject* colObj0, int32_t partId0, int32_t index0, const btCollisionObject* colObj1, int32_t partId1, int32_t index1);
btDiscreteDynamicsWorld* DynamicsWorld;
};
Und unten ist, wo ich implementieren Sie die main-Funktion. Noch nicht sicher, warum ich immer diese Fehlermeldung.
War ich mit dem code unten auf windows mit beiden vc2010 und code-Blöcke, ohne ein problem:
btScalar DisablePairCollision::addSingleResult(btManifoldPoint& cp, const btCollisionObject* colObj0, int32_t partId0, int32_t index0, const btCollisionObject* colObj1, int32_t partId1, int32_t index1)
{
//Create an identity matrix.
btTransform frame;
frame.setIdentity();
//Create a constraint between the two bone shapes which are contacting each other.
btGeneric6DofConstraint* Constraint;
Constraint = new btGeneric6DofConstraint( *(btRigidBody*)colObj0, *(btRigidBody*)colObj1, frame, frame, true );
//Set limits to be limitless.
Constraint->setLinearLowerLimit( btVector3(1, 1, 1 ) );
Constraint->setLinearUpperLimit( btVector3(0, 0, 0 ) );
Constraint->setAngularLowerLimit( btVector3(1, 1, 1 ) );
Constraint->setAngularUpperLimit( btVector3(0, 0, 0 ) );
//Add constraint to scene.
DynamicsWorld->addConstraint(Constraint, true);
return 0;
}
Nun ich versuche mein Projekt zu kompilieren unter Ubuntu aber ich bekomme diese Fehlermeldung, wenn ich versuche, die die Verwendung dieser Klasse:
/home/steven/Desktop/ovgl/src/OvglScene.cpp:211: error: cannot declare variable ‘Callback’ to be of abstract type ‘Ovgl::DisablePairCollision’
- Was
Callback
? - besser: Wo ist
Callback
? - welchen compiler benutzt du mit Code::Blocks unter Windows?
- Callback ist eine variable innerhalb einer Funktion Klasse. Ich definiere es so: DisablePairCollision Callback; ich verwendete GCC-MinGW-compiler in den code-Blöcken.
- Der code, den Sie geschrieben hat nichts mit dem Fehler zu tun. Warum postest du es? Und warum hast du nicht nach dem code, enthält die eigentlichen Fehler-Zeile?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Grund, warum die Basisklasse ist Abstrakt ist diese rein virtuelle Funktion:
Der abgeleiteten Klasse
DisablePairCollision
zu bestimmen versucht, die Funktion, aber es tut es nicht, richtig:Wie Sie sehen können, einige der Argumente, die verschiedene Typen haben. E. g.
colObj0
ist der Typconst btCollisionObject*
, aber es sollte vom Typconst btCollisionObjectWrapper*
.Daher die abgeleitete Klasse definiert eine neue Funktion mit unterschiedlichen Argumenten, aber es definiert nicht die rein virtuelle Funktion der Basisklasse, damit die abgeleitete Klasse ist als Abstrakt.
Definieren Sie die Funktion mit dem genau gleichen argument-Typen wie in der Basisklasse.
Ovgl::DisablePairCollision
ist eine abstrakte Klasse, was bedeutet, es enthält mindestens eine rein virtuelle Funktion.Müssen Sie leiten sich von dieser Klasse und implementieren die abstrakte Funktionalität des.
Beispiel: