【问题标题】:call of overloaded *** <unresolved overloaded function type>)' is ambiguous重载 *** <未解析的重载函数类型>)' 的调用不明确
【发布时间】:2016-07-28 22:12:04
【问题描述】:

请帮我解决这个错误

template <typename Inputlterator, typename Outputlterator, typename Predicate>
Outputlterator copy_if( Inputlterator begin, Inputlterator end, Outputlterator destBegin, Predicate p) 
{
    return remove_copy_if(begin, end,destBegin, not1( ptr_fun( p ) ) );
}
template <class T> bool is_not_3( T val ) {
    return val != 3;
}
void foo( ) {
    vector<int> v;
    v.push_back( 1 );
    v.push_back( 2 );
    v.push_back( 3 );
    copy_if( v.begin( ), v.end( ), ostream_iterator<int>( cout, " " ), is_not_3<int> );
}

我收到一条错误消息 : 错误: 重载 'copy_if(std::vector::iterator, std::vector::iterator, std::ostream_iterator, )' 的调用不明确

【问题讨论】:

    标签: c++ function overloading


    【解决方案1】:

    重写此语句

    copy_if( v.begin( ), v.end( ), ostream_iterator<int>( cout, " " ), //...);
    

    喜欢

    ::copy_if( v.begin( ), v.end( ), ostream_iterator<int>( cout, " " ), //...);
    ^^^
    

    否则你的函数与标准算法std::copy_if冲突

    由于您使用了引语而出现的问题

    using namespace std;
    

    请注意,您的代码 sn-p 中的函数调用未按语法完成。您忘记指定最后一个参数。

    【讨论】:

    • 感谢弗拉德的回复。抱歉,最后一个参数有很多空格,所以它不可见。我编辑了帖子。添加范围解析有助于解决错误。非常感谢
    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多