QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 618|回复: 1

谁能帮忙看看这个程序的错误

[复制链接]
发表于 2004-8-5 15:57:05 | 显示全部楼层 |阅读模式
template <class ForwardIterator, class Type>
ForwardIterator find(ForwardIterator first, ForwardIterator last, Type value)
{
        for (; first!=last; ++first)
                if (value==*first)
                        return first;
        return last;
}

#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
        int search_value;
        int ia[6] = {27, 210, 12, 47, 109, 83};
        cout<<"enter search value: ";
        cin>>search_value;
        int *presult = find(&ia[0], &ia[6], search_value);
        cout<<"The value "<<search_value<<(presult == ia+6 ? "is not present" : "is present")<<endl;
        return 0;
}

=================================[root@localhost root]# g++ temp.cpp
temp.cpp: In function `int main()':
temp.cpp:19: error: call of overloaded `find(int*, int*, int&)' is ambiguous
temp.cpp:3: error: candidates are: ForwardIterator find(ForwardIterator,
   ForwardIterator, Type) [with ForwardIterator = int*, Type = int]
/usr/include/c++/3.3.3/bits/stl_algo.h:293: error:                 _InputIter
   std::find(_InputIter, _InputIter, const _Tp&) [with _InputIter = int*, _Tp =   int]
发表于 2004-8-5 22:46:38 | 显示全部楼层
错误信息里说得很清楚了.

标准库里面已经定义了一个函数叫 find,
而你现在又定义了一个函数也叫 find,
在你上面程序的第19行中
int *presult = find(&ia[0], &ia[6], search_value);
调用了一个 find, 但根据它的自变量列表, 编译器发现没法决定是选择标准库里面的那个还是你自己定义的那个.
这就叫ambiguous.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 18:06 , Processed in 0.054785 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表