2009-11-06 2 views
0

혼란 스럽습니다.유형이없는 선언

나는이 작업을 수행 : 벡터의 위 용도의 각각에 대해

.: error: ISO C++ forbids declaration of 'vector' with no type 
.: error: expected ';' before '<' token 

:

#include <vector> 

// List iteration 
typedef vector<registeredObject>::iterator iterator; 
typedef vector<registeredObject>::const_iterator const_iterator; 
vector<registeredObject>::iterator begin(void); 
vector<registeredObject>::const_iterator begin(void) const; 
vector<registeredObject>::iterator end(void); 
vector<registeredObject>::const_iterator end(void) const; 

내가 같은 오류를 얻을. 이 코드는 이전 CodeWarrior에서 컴파일되지만 XCode는 불평합니다. 이슈가 뭐야?

좋은 참고 자료가 있습니까?

[편집] 여기에 전체 헤더 Here

+0

어떤 특정 줄이 오류가 발생합니까? – jmucchiello

답변

13

vectorstd 네임 스페이스에 있습니다 :

또한
typedef std::vector<registeredObject>::iterator iterator; 

, 왜 이들 유형을 정의하고 사용하지 않을?

typedef std::vector<registeredObject> container; 
typedef container::iterator iterator; 
typedef container::const_iterator const_iterator; 

iterator begin(void); 
const_iterator begin(void) const; 
iterator end(void); 
const_iterator end(void) const; 

registeredObject을 정의하지 않았을 수도 있습니다. int으로 시도해보십시오.


지금 우리가 registeredObject 템플릿 매개 변수입니다 참조, 당신은 typename이 필요합니다

typedef typename std::vector<registeredObject> container; 
typedef typename container::iterator iterator; 
typedef typename container::const_iterator const_iterator; 

Here's why.

는하지만, 다른 일을 잊지 마십시오. std::이 필요하며 실제로 정의 된 유형을 사용하십시오. (이 수업의 양쪽에 고정해야합니다.)

참고는 템플릿 형식으로 T을 사용하는 것이 더 일반적인 많은 입니다.

typedef T value_type; 
typedef std::vector<value_type> container; 
typedef typename container::iterator iterator; 
typedef typename container::const_iterator const_iterator; 

을 그리고 당신의 클래스에서 다음을 사용 : 그것은 당신의 typedef 년대에 관대 다음 또한 일반적입니다. (대신 container mRegistryList;을 사용하십시오)

+0

@Gman - 벡터를 사용하기 전에 std를 넣는 것으로 이해할 수 있는지 모르겠다. 위의 클래스에 대한 링크를 게시했습니다.나는 그것이 나를 혼란스럽게하는 템플릿이라고 생각한다. –

0

registeredObject가 선언 되었습니까? RegisteredObject.h를 포함 시켰습니까?

0

내가 추측해야만한다면 registeredObject 유형이 파일에 정의되어 있지만이 헤더 파일에 포함되어 있지 않다고 말할 수 있습니다.

한 .CPP 파일 MyIteratorDeclarations.h 전에 RegisteredObject.h를 포함 일어날 수 있으며이 작동합니다. 그런데 다른 파일에 MyIteratorDeclarations.h이 포함되어있을 수 있습니다. 그러면 오류가 발생합니다.

현재로서는 충분한 코드가 제공되지 않아 확실하지 않습니다. 아마도 첫 번째 오류까지 모든 헤더 파일 내용을 표시하도록 예제를 변경할 수 있습니다.

+0

@Andrew : 위의 링크에서 클래스를 txt 파일로 게시했습니다. –