有关模板和迭代器的一个有关问题

有关模板和迭代器的一个问题
代码:

IteratorTemplate.h
#ifndef ITERATORTEMPLATE_H_INCLUDED
#define ITERATORTEMPLATE_H_INCLUDED

#include <iostream>

template<typename DataType>
class IteratorTemplate
{
private:
    static const int SIZE=10;
    DataType array[SIZE];
public:
    typedef DataType* Iterator;

    Iterator begin()
    {
        return array;
    }
    Iterator end()
    {
        return array+SIZE;
    }

    void traverse(Iterator beg, Iterator end);
//    {
//        for(; beg!=end; ++beg)
//        {
//            std::cout<<*beg<<std::endl;
//        }
//    }
};

#endif // ITERATORTEMPLATE_H_INCLUDED


IteratorTemplate.cpp
#include "IteratorTemplate.h"

#include <iostream>

template<typename DataType>
void IteratorTemplate<DataType>::traverse(Iterator beg, Iterator end)
{
    for(;beg!=end;++beg)
    {
        std::cout<<*beg<<std::endl;
    }
}


以上方式定义类IteratorTemplate,在调用traverse的时候总是报类似错误:“undefined reference to `IteratorTemplate<int>::traverse(int*, int*)'|”.不明白为何如此?

另外,如果将traverse方法的实现放入IteratorTemplate类内(类似于begin和end方法),就不会出错。所以错误应该在与traverse方法的定义上。

请帮忙分析。
c++ template iterator

------解决方案--------------------
模版一般都不支持分离,一般函数实现和声明放在一起。
------解决方案--------------------
引用:
引用:模版一般都不支持分离,一般函数实现和声明放在一起。
不支持分离?为什么?预编译的问题?
因为模板要根据每个模板参数都生成一套代码,放在cpp里不知道具体类型没法编译,放头文件的话因为包含进去了所以能找到