gpt4 book ai didi

c++模板如何从一个需要访问另一个文件模板的文件调用模板

转载 作者:行者123 更新时间:2023-11-30 02:52:15 25 4
gpt4 key购买 nike

我是模板的新手,作为练习,我尝试在一个文件中编写自己的模板迭代器,然后在另一个文件中的查找算法中使用该迭代器。

例如在 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++编译时;

所以我的问题是,我如何包含文件(或类似的东西),这将允许一个文件的模板访问/识别另一个文件的模板。

顺便说一句,我不确定标题是否正确地反射(reflect)了问题。随意更改标题的名称

谢谢。

最佳答案

看起来你有一些多余的指针,试试

template <typename T, typename TIter>
inline
TIter find (TIter start , TIter stop , const T & value)
{
// ...
}

作为函数的签名。 (注意缺少的 *)

此外,正如 DyP 指出的,您可能需要 *start != value 而不是 *start == value

关于c++模板如何从一个需要访问另一个文件模板的文件调用模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19124038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com