Build error for static_cast of btCollisionObject*

xman
Posts: 2
Joined: Sat Nov 17, 2012 4:19 pm

Build error for static_cast of btCollisionObject*

Post by xman »

Hi, I'm trying to build bullet 2.81 with my simulator code which is based on VTK 5.10 + QT4.

I have been used bullet 2.80, and had no problem with my code. But after installing to bullet 2.81, I got a build problem with my code. The error said

' error: static_cast from type 'const btCollisionObject*' to type 'btCollisionObject*' casts away qualifiers '

The code is

Code: Select all

int numManifolds =  discreteTimeStepWorld->getDispatcher()->getNumManifolds();
	for (i=0;i<numManifolds;i++)
	{
		btPersistentManifold* contactManifold = discreteTimeStepWorld->getDispatcher()->getManifoldByIndexInternal(i);
		btCollisionObject* obA = static_cast<btCollisionObject*>(contactManifold->getBody0());
		btCollisionObject* obB = static_cast<btCollisionObject*>(contactManifold->getBody1());
                 ...
          }
And basically same with the demo 'CollisionInterfaceDemo'. The demo is compiled and working well, but not my codes.

Environment: 32 bit, intel, ubuntu 12.04

Any idea?
Empire-Phoenix
Posts: 24
Joined: Sat Nov 07, 2009 7:57 pm

Re: Build error for static_cast of btCollisionObject*

Post by Empire-Phoenix »

Did you try to put in a -fpermissive?
Granyte
Posts: 77
Joined: Tue Dec 27, 2011 11:51 am

Re: Build error for static_cast of btCollisionObject*

Post by Granyte »

i had to replace it with a const cast in 2.81
xman
Posts: 2
Joined: Sat Nov 17, 2012 4:19 pm

Re: Build error for static_cast of btCollisionObject*

Post by xman »

Unfortunately, I already tried const_cast, and it did not work. Apparently, some of the member functions in btCollisionObject are changed to const member function in bullet 2.81. I just solved the problem by modifying 'static_cast<btCollisionObject*>' to '(btCollisionObject*)'. But, I don't know why const_cast didn't work for me.
Jonathan
Posts: 36
Joined: Sun Feb 10, 2013 6:52 pm

Re: Build error for static_cast of btCollisionObject*

Post by Jonathan »

I'm also running into the same error here. Casting away the const can't be the intended use. Can we get Erwin to explain what the change was about here?

Thanks.
marios
Posts: 52
Joined: Mon Jul 19, 2010 3:11 am

Re: Build error for static_cast of btCollisionObject*

Post by marios »

I think you just don't need casting, because getBody() in bullet 2.81 returns btCollisionObject* instead void* which was in previous bullet versions. So it should be just:

btCollisionObject* obA = contactManifold->getBody0();
or
const btCollisionObject* obA = contactManifold->getBody0();
Jonathan
Posts: 36
Joined: Sun Feb 10, 2013 6:52 pm

Re: Build error for static_cast of btCollisionObject*

Post by Jonathan »

marios wrote:I think you just don't need casting, because getBody() in bullet 2.81 returns btCollisionObject* instead void* which was in previous bullet versions. So it should be just:

btCollisionObject* obA = contactManifold->getBody0();
or
const btCollisionObject* obA = contactManifold->getBody0();
Ah yes, this makes sense. Derp! Can't believe I missed that. Should I go ahead and edit the wiki (http://bulletphysics.org/mediawiki-1.5. ... d_Triggers) to reflect the proper line of code?

Code: Select all

const btCollisionObject* obA = contactManifold->getBody0();
const btCollisionObject* obB = contactManifold->getBody1();