Cannot declare a variable an "abstract type"

EDIT: Having spent a little time understanding the code I wrote, I still don't know what is wrong with it. This is the base class from which I got my class:

///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; }; 

Now here is my derived class:

 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; }; 

And below I implement the main function. Still not sure why I am getting this error.

I used the code below for windows with vc2010 and code blocks without problems:

 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; } 

Now I'm trying to compile my project on Ubuntu, but I get this error when I try to use this class:

 /home/steven/Desktop/ovgl/src/OvglScene.cpp:211: error: cannot declare variable 'Callback' to be of abstract type 'Ovgl::DisablePairCollision' 
+6
source share
2 answers

The reason the base class is abstract is a pure virtual function:

 virtual btScalar addSingleResult( btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap, int partId0, int index0, const btCollisionObjectWrapper* colObj1Wrap, int partId1, int index1) = 0; 

The derived class DisablePairCollision tries to define this function, but it does not do it correctly:

 virtual btScalar addSingleResult( btManifoldPoint& cp, const btCollisionObject* colObj0, int32_t partId0, int32_t index0, const btCollisionObject* colObj1, int32_t partId1, int32_t index1); 

As you can see, some arguments have different types. For instance. colObj0 is of type const btCollisionObject* , but it must be of type const btCollisionObjectWrapper* .

Therefore, the derived class defines a new function with different arguments, but does not define a pure virtual function from the base class, so the derived class is still abstract.

You need to define a function with the same types of arguments as in the base class.

+19
source

Ovgl::DisablePairCollision is an abstract class, meaning that it contains at least one pure virtual function .

You need to extract from this class and implement the abstract functionality.

For instance:

 class DisablePairCollision { virtual void foo() = 0; }; class DerivedClass : public DisablePairCollision { virtual void foo() {} }; DisablePairCollision* pCallback; pCallback = new DerivedClass; pCallback->foo(); 
+6
source

Source: https://habr.com/ru/post/921256/


All Articles