2012-02-05 69 views
2

我將C++用於我的項目的一小部分。我必須編寫錯誤的代碼,但是我的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.

回答

6

您忘記添加該功能的範圍。嘗試:

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

爲什麼錯誤指向你那個陌生的地方?編譯器會看到你的函數定義,並認爲這是一個自由函數,因爲沒有任何指示,並且試圖處理它。它失敗了,因爲它試圖在全局範圍中查找變量。這可以變得更有趣(閱讀:更混亂):圖像,該函數不使用類成員。它將被簡單地解析並編譯爲一個免費函數。只要您嘗試在該類型的對象上調用它,您將會收到鏈接器錯誤。

此外,我看不到id類型的聲明,它在AbstractContactListener中使用,但這可能只是因爲代碼示例不完整。

+0

嘿,謝謝你的解釋:)完美的解決方案! n.b. ID的AbstractContactListener實際上是在代碼示例之外聲明的。謝謝指出,雖然;-) – Jem 2012-02-05 18:29:44

2

您從

void isFixtureCollidingWithFixtureOfType(b2Fixture fix, int type) 
+0

嘿謝謝!那麼發現:-) – Jem 2012-02-05 18:27:37

2

無效AbstractContactListener :: isFixtureCollidingWithFixtureOfType(b2Fixture修復,整型)

在實施忘了類名。

:)

+0

好吧!的確,非常感謝! – Jem 2012-02-05 18:27:48