我将C ++用于项目的一小部分。我必须编写错误的代码,但我对C ++的了解就是它,我无法解决这个问题......
请参阅下面的AbstractContactListener.h和.mm文件。问题出在isFixtureCollidingWithFixtureOfType(...)方法中,我无法访问_contact向量。我在这里做错了什么?
头:
struct JRContact {
b2Fixture *fixtureA;
b2Fixture *fixtureB;
bool operator==(const JRContact& other) const
{
return (fixtureA == other.fixtureA) && (fixtureB == other.fixtureB);
}
};
class AbstractContactListener : public b2ContactListener {
id contactHandler;
public:
std::vector<JRContact>_contacts;
AbstractContactListener(id handler);
~AbstractContactListener();
void isFixtureCollidingWithFixtureOfType(b2Fixture fix, int type);
virtual void BeginContact(b2Contact* contact);
virtual void EndContact(b2Contact* contact);
};
实现:
AbstractContactListener::AbstractContactListener(id handler) : _contacts() {
contactHandler = handler;
}
AbstractContactListener::~AbstractContactListener() {
}
void isFixtureCollidingWithFixtureOfType(b2Fixture fix, int type){
std::vector<JRContact>::iterator ct;
// Next line is faulty... can't call _contacts.begin()
// xCode says: "Use of undeclared identifier _contacts"
ct = _contacts.begin();
}
void AbstractContactListener::BeginContact(b2Contact* contact) {
// ...
}
void AbstractContactListener::EndContact(b2Contact* contact) {
// ...
}
未声明的?嗯。我以为我在标题中声明了它,就在“public:”关键字之后。
我在这里做错了什么? 非常感谢! 学家
答案 0 :(得分:6)
您忘记添加该功能的范围。尝试:
void AbstractContactListener::isFixtureCollidingWithFixtureOfType(b2Fixture fix, int type){
为什么错误指向那个奇怪的地方?编译器会看到你的函数定义并认为这是一个自由函数,因为没有任何东西可以指示其他情况并尝试处理它。它失败了,因为它试图在全局范围内找到变量。这可以变得更有趣(阅读:更令人困惑):此函数不使用类成员的图像。它将被简单地解析并编译为自由函数。一旦您尝试在该类型的对象上调用它,您将收到链接器错误。
另外,我看不到id
中使用的AbstractContactListener
类型的声明,但这可能只是因为代码示例不完整。
答案 1 :(得分:2)
您忘记了
中的班级名称void isFixtureCollidingWithFixtureOfType(b2Fixture fix, int type)
答案 2 :(得分:2)
void AbstractContactListener :: isFixtureCollidingWithFixtureOfType(b2Fixture fix,int type)
在实施中。
:)