음... 책을 보면서 이것저것 하고 있는데 컴파일 되지 않은 소스가 있더군요.
일단 그 소스를 올려봅니다.

template <typename T>
class ZVector {
private:
        typedef std::vector<T>        VTYPE;
        typedef std::vector<T>::iterator        VITOR;
        VTYPE        m_Vector;
public:
        void Out();
        void Push_back(T Data){
                m_Vector.push_back(Data);
        }
};

이럴 경우 반복자가 종속 이름 형식이 아니다라는 경고가 뜨면서 컴파일되지 않습니다.

그래서...이걸 지우고 이렇게 하면 됩니다.

template <typename T>
void ZVector<T>::Out()
{
        std::vector<T>::iterator iter1;
        for ( iter1 = m_Vector.begin() ; iter1 != m_Vector.end() ; ++iter1)
        {
                std::cout << *iter1 << std::endl;
        }
}

따로 typedef를 하지 않고 Out()함수 안에다만 템플릿 반복자를 지정해 주면 컴파일도 되고 실행도 되더군요.
혹시나 몰라서...


template <typename T>
class ZVector {
private:
        typedef std::vector<T>                                VTYPE;
        std::vector<T>::iterator                        iter;
        VTYPE        m_Vector;

이렇게 typedef를 하지 않고 멤버변수로 선언해 봤지만 역시 초반과 같은 에러가 뜹니다. 템플릿반복자를 가지지 못하는 것일까요.
흠...

컴파일러의 차이일까요? 참고로 전 닷넷2005를 사용하고 있습니다.