3

我将在我项目的一小部分中使用 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:”关键字之后。

我在这里做错了什么?多谢!J。

4

3 回答 3

7

您忘记添加函数的范围。尝试:

void AbstractContactListener::isFixtureCollidingWithFixtureOfType(b2Fixture fix, int type){

为什么错误会将您指向那个奇怪的地方?编译器看到您的函数定义并认为这是一个自由函数,因为没有任何其他指示并尝试按此方式处理它。它失败了,因为它试图在全局范围内查找变量。这可能会变得更有趣(阅读:更令人困惑):这个函数不使用类成员的图像。它将被简单地解析和编译为一个自由函数。一旦您尝试在该类型的对象上调用它,您将收到链接器错误。

另外,我看不到使用的类型的声明,id但这AbstractContactListener可能只是因为代码示例不完整。

于 2012-02-05T17:45:35.003 回答
2

你忘记了班级名称

void isFixtureCollidingWithFixtureOfType(b2Fixture fix, int type)
于 2012-02-05T17:43:53.357 回答
2

void AbstractContactListener::isFixtureCollidingWithFixtureOfType(b2Fixture fix, int type)

在实施中。

:)

于 2012-02-05T17:45:14.473 回答