2012-02-05 2 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) { 
    // ... 
} 

선언되지 않은? 흠. 나는 header에서 "public :"키워드 바로 뒤에 그것을 선언하고 있다고 생각했다.

내가 여기서 잘못 할 수 있습니까? 감사합니다. J.

답변

6

기능의 범위를 추가하는 것을 잊지 마십시오. 시도해보십시오 :

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

왜 그 이상한 곳으로 향하는 오류가 있습니까? 컴파일러는 함수 정의를보고이 함수가 자유 함수라고 생각합니다. 달리 나타내지는 것이 없으며이를 처리하려고 시도합니다. 전역 범위에서 변수를 찾으려고하기 때문에 실패합니다. 이것은 더 재미있게 될 수 있습니다 (읽기 : 더 혼란 스러움) :이 함수가 클래스 멤버를 사용하지 않는다는 이미지입니다. 그것은 단순히 구문 분석되고 자유 함수로 컴파일됩니다. 해당 유형의 객체에서 호출하려고하면 링커 오류가 발생합니다.

또한 의 선언은 보이지 않지만 AbstractContactListener에서 사용되지만 이는 코드 샘플이 불완전하기 때문일 수 있습니다.

+0

그 설명을 위해 어이 감사합니다 :) 완벽한 해결책! n.b. id AbstractContactListener는 실제로 코드 샘플 외부에서 선언되었습니다. 그래도 지적 해 주셔서 고마워. ;-) – Jem

2

당신은

void isFixtureCollidingWithFixtureOfType(b2Fixture fix, int type) 
+0

안녕하세요. 잘 보입니다 :-) – Jem

2

무효 AbstractContactListener :: isFixtureCollidingWithFixtureOfType (b2Fixture 수정, INT 타입) 구현에

에서 클래스 이름을 잊어 버렸습니다.

:)

+0

좋습니다. 정말로, 고마워! – Jem

관련 문제