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){

Why is the error pointing you to that strange place? The compiler sees your function definition and thinks that this is a free function, as there is nothing that indicates otherwise and tries to handle it as such. It fails, because it tries to find the variable in the global scope. This can get even funnier (read: more confusing): Image that this function does not use a class member. It will be simply parsed and compiled as a free function. As soon as your try to call it on an object of that type you will get a linker error.

Also, I cannot see a declaration of the type id which is used in AbstractContactListener but that might just be because the code sample is incomplete.

于 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 に答える