有关模板和迭代器的一个有关问题
有关模板和迭代器的一个问题
代码:
IteratorTemplate.h
IteratorTemplate.cpp
以上方式定义类IteratorTemplate,在调用traverse的时候总是报类似错误:“undefined reference to `IteratorTemplate<int>::traverse(int*, int*)'|”.不明白为何如此?
另外,如果将traverse方法的实现放入IteratorTemplate类内(类似于begin和end方法),就不会出错。所以错误应该在与traverse方法的定义上。
请帮忙分析。
------解决方案--------------------
模版一般都不支持分离,一般函数实现和声明放在一起。
------解决方案--------------------
因为模板要根据每个模板参数都生成一套代码,放在cpp里不知道具体类型没法编译,放头文件的话因为包含进去了所以能找到
代码:
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里不知道具体类型没法编译,放头文件的话因为包含进去了所以能找到