gpt4 book ai didi

c++ - box2d 联系监听器中的语义问题

转载 作者:行者123 更新时间:2023-11-28 07:31:59 25 4
gpt4 key购买 nike

我正在 Xcode 中开发一个 cocos2d 项目,并且我一直在尝试让碰撞检测工作数周。我一直在使用 Ray Wenderlich 教程,该教程说使用接触监听器来检测碰撞。但是,我收到错误消息二进制表达式的无效操作数('const MyContact' 和'const MyContact')。我从未见过此错误,任何人都可以帮助解决这个问题吗?

#import "MyContactListener.h"

MyContactListener::MyContactListener() : _contacts() {
}

MyContactListener::~MyContactListener() {
}

void MyContactListener::BeginContact(b2Contact* contact) {
MyContact myContact = { contact->GetFixtureA(), contact->GetFixtureB() };
_contacts.insert(myContact); <------------//Says "7.In instantiation of member function 'std::set<MyContact, std::less<MyContact>, std::allocator<MyContact> >::insert' requested here"
}

void MyContactListener::EndContact(b2Contact* contact) {
MyContact myContact = { contact->GetFixtureA(), contact->GetFixtureB() };
std::set<MyContact>::iterator pos;
pos = std::find(_contacts.begin(), _contacts.end(), myContact);
if (pos != _contacts.end()) {
_contacts.erase(pos);
}
}

void MyContactListener::PreSolve(b2Contact* contact, const b2Manifold* oldManifold) {
}

void MyContctListener::PostSolve(b2Contact* contact, const b2ContactImpulse* impulse) {
}

最佳答案

您必须在 MyContact 类中实现比较运算符,以便将其插入到 std::set 中。像这样的东西:

class MyContact
{
...
bool operator<(const MyContact &other) const
{
if (fixtureA == other.fixtureA) //just pointer comparison
return fixtureB < other.fixtureB;
return fixtureA < other.fixtureA;
}
};

std::set 需要比较运算符以维护其内部二叉搜索树。

关于c++ - box2d 联系监听器中的语义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17481499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com