C++初学者编程错误:“未声明的标识符”?

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.

3个回答

7

您忘记添加函数的作用域。请尝试:

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

为什么错误指向那个奇怪的地方?编译器看到你的函数定义,并认为这是一个自由函数,因为没有任何指示表明它不是,并试图将其作为自由函数处理。它失败了,因为它尝试在全局范围内查找变量。这可能会变得更加有趣(即更加混乱):假设这个函数不使用类成员。它将被简单地解析和编译为自由函数。一旦你尝试在该类型的对象上调用它,你将得到一个链接错误。
此外,我看不到AbstractContactListener中使用的id类型的声明,但这可能只是因为代码示例不完整。

嘿,谢谢你的解释 :) 完美的解决方案! 顺便提一下,AbstractContactListener的id确实是在代码示例之外声明的。不过还是感谢你指出来了;-) - Jem

2

您忘记了类名

void isFixtureCollidingWithFixtureOfType(b2Fixture fix, int type)

2

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

在实现中。

:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接