2010-03-19 4 views
1

C++에서 Graph ADT를 구현하는 데 많은 시간을 할애하고 있습니다. 나는 모서리와 정점을위한 템플릿을 가지고 있습니다. 각 꼭지점에는 내가있는 가장자리에 대한 포인터가 들어있는 벡터가 있습니다. 이제 저는 그 가장자리를 반복자로 만들려고합니다. 다음은 코드 줄입니다.템플릿의 객체 벡터에 대해 반복자를 얻으려면 어떻게해야합니까?

vector<Edge<edgeDecor, vertexDecor, dir>*> edges = this->incidentEdges(); 
vector<Edge<edgeDecor, vertexDecor, dir>*>::const_iterator i; 
for (i = edges.begin(); i != edges.end(); ++i) { 

그러나 컴파일러는 중간 줄을 허용하지 않습니다. 나는 C++을 처음 접했어. 내가 놓친 게 있니? Edge 템플릿의 객체에 반복자를 선언 할 수없는 이유는 무엇입니까? 컴파일러는 유용한 피드백을 제공하지 않습니다.

많은 감사 niel

+6

컴파일 오류가 발생하면 오류를 표시하는 데 도움이됩니다. :) 또한, 가능하면 전체 기능, 그래서 우리는 각 변수가 어떻게 될지 알 수 있습니다. – GManNickG

답변

3

그 조각이 템플릿에서 온다면, 당신은 아마 따라 이름의 문제로 실행 한 - typename 사용

typename vector<Edge<edgeDecor, vertexDecor, dir>*>::const_iterator i; 

typename 당신이 언급하는 컴파일러를 알려줍니다 유형. 이를 사용하지 않으면 종속 이름이 유형 또는 템플리트가 아닌 것으로 간주됩니다.

자세한 내용은 다음을 참조하십시오. Comeaus template FAQ.

+0

여기서'typename' 키워드가 필요하다고 생각하지 않습니다. Edge는 클래스로 사용됩니다 (완전히 전문화되어 있습니다). 여기에서 볼 수있는 템플릿이 아닙니다. –

+0

"Edge <>"에 대한 템플릿 인수 중 적어도 하나가 주변 템플리트에 대한 템플리트 인수라고 가정합니다. –

+0

고맙습니다. 해결할 것 같아서 이제는 잘 컴파일됩니다. 아직 코드를 테스트하지는 않았지만 그 코드의 마지막이라고 확신합니다. 관심있는 사람들을 위해 http://pastebin.com/dR3S78Pv (변경되지 않음)에있는 문제의 cpp 파일뿐만 아니라 두 헤더 파일을 붙여 넣었습니다. –

관련 문제