Я (пытаюсь) написать какой-то (работающий) C ++ в проекте ObjC :-) Библиотека C ++ (Box2D) предоставляет мне класс b2Fixture, который имеет свойство «пользовательские данные», позволяющее кодировщикам хранить то, что имеет отношение к делу. им.
В моем случае, он просто должен хранить целое число. Из моей основной программы в ObjC одно приведение целого числа к void *:
headFixture->SetUserData( (void*) 10 );
В служебном методе на стороне C ++ программы я хотел бы сравнить пользовательские данные с заданным целым числом (т. Е. Они являются константами, 10 = сплошная земля, 11 = платформа и т. Д.).
Первое сравнение использует (void *), который отказывается компилироваться. Нашел на SO другой подход, как показано во втором сравнении, использующем * ((intptr_t *) ...). Это компилируется, но отправляет EXC_BAD_ACCESS:
bool AbstractContactListener::contactContainsType(JRContact contact, int type){
if (( type == ( (void *) contact.fixtureA->GetUserData() )) ||
( type == *( (intptr_t *) contact.fixtureB->GetUserData() ))
) {
return true;
}
return false;
}
У меня заканчиваются идеи для решения этой проблемы.
Пожалуйста помоги :-)
Спасибо!
J.
EDIT / Решение:
bool AbstractContactListener::contactContainsType(JRContact contact, int type){
if (( type == (intptr_t) contact.fixtureA->GetUserData() ) ||
( type == (intptr_t) contact.fixtureB->GetUserData() )
) {
return true;
};
return false;
}
Этот работал для меня!