我是模板新手,作为练习,我试图在一个文件中编写自己的模板迭代器,然后在另一个文件中使用该迭代器来查找算法。
例如在 myfind.h 我有
#ifndef my_find_header
#define my_find_header
template <typename T, typename TIter>
inline
TIter * find (TIter * start , TIter * stop , const T & value)
{
while ((start != stop ) && (*start != value))
{
start++;
}
return start;
}
#endif
在 arr_it.h 我有
#include <stdlib.h>
#ifndef arr_it_header
#define arr_it_header
template <typename T>
class arr_it
{
public:
arr_it(T *p);
T & operator * () const;
arr_it operator++ (int);
bool operator != (const arr_it<T> & other) const;
private:
T * my_p;
};
//start of definitions
template <typename T>
inline
arr_it<T>:: arr_it(T *p)
{
my_p = p;
}
template <typename T>
inline
T & arr_it<T>::operator * () const
{
return *my_p;
}
template <typename T>
inline
arr_it<T> arr_it<T>::operator++ (int)
{
arr_it<T> result(*this);
my_p++;
return result;
}
template <typename T>
inline
bool arr_it<T>::operator != (const arr_it<T> & other) const
{
return (my_p != other.my_p);
}
#endif
我在我的 main.cpp 中调用它
#include <iostream>
#include <stdlib.h>
#include "builtin_arr_it.h"
#include "myfind.h"
int main()
{
int my_array[10];
for (int i =0; i<100; i++)
{
my_array[i]=1;
}
my_array[47]= -1;
my_array[4]= -1;
const int value(-1);
arr_it <int> start (my_array);
arr_it <int> stop (my_array +10);
arr_it<int> p = (find (start, stop, value));
return 0;
}
但是,我收到以下错误
error: no matching function for call to 'find(array_it<int>&, array_it<int>&, const int&)'
使用 g++ 编译时;
所以我的问题是,我如何包含文件(或类似的东西),这将允许一个文件的模板访问/识别另一个文件的模板。
顺便说一句,我不确定标题是否正确地抓住了这个问题。随意更改标题的名称
谢谢。