2009-06-26 5 views
0

C++ 컴파일 오류

#include <iterator> 
#include <vector> 

template <class T1, class T2 > 
class A 
{ 
public: 

    typename std::vector<std::pair<T1,T2> >::iterator iterator; 
    std::pair<iterator, bool > foo(const std::pair<T1 ,T2> &value_in); 
}; 

사람이에 대한 몇 가지 빛을 던질 수 2009 Visual Studio에서 컴파일 오류를주고있다? 다음은 오류입니다.

typename std::vector<std::pair<T1,T2> >::iterator iterator; 

는 당신이 찾으 셨나요? 당신은 타입 정의를 필요로

error C2327: 'A<T1,T2>::iterator' : is not a type name, static, or enumerator 

답변

9

TYPENAME하지?

typedef typename std::vector<std::pair<T1,T2> >::iterator iterator; 

추가 정보 : 당신이 typename가하는 일에 대해 궁금하다면, dependent 및 비 의존적 이름 사이의 차이점에 대해 읽어. 유형이 특정 컨테이너와 밀접하게 관련된 경우 STL 패턴은 쉽게 액세스 할 수있는 여러 중첩 된 typedef (V::value_type 아래)를 사용하기 때문에 해당 컨테이너의 typedef가 유용 할 수 있습니다. 이것은 코드가 진화함에 따라 변경이 덜 필요하다는 추가 장점을 가지고 있습니다. 다른 할당 자 (벡터에 두 번째 템플릿 매개 변수)를 사용하면 하나의 편집 만 있으면됩니다.

template<class T1, class T2> 
struct A { 
private: 
    // you may or may not want to expose these convenience types 
    typedef std::pair<T1, T2> P; 
    typedef std::vector<P> V; 

public: 
    typedef typename V::value_type value_type; 
    typedef typename V::iterator iterator; 
    std::pair<iterator, bool> foo(value_type const& value_in); 
}; 
0

,이 iterator 변수 (안 타입)으로 선언