음... 책을 보면서 이것저것 하고 있는데 컴파일 되지 않은 소스가 있더군요.
일단 그 소스를 올려봅니다.
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를 사용하고 있습니다.
( 따옴표는 강조를 위해 넣었습니다. 실제 코드에서는 빼주세요. )
관련 내용은..
target=_blank>http://www.gpgstudy.com/forum/viewtopic.php?t=17240&highlight=typename