2013-03-07 113 views
4

我有以下代码:没有匹配函数调用“查找”

#include <algorithm> 
#include <vector> 
#include <iostream> 
#include <stdio.h> 

using namespace std; 

int main() 
{ 
    typedef vector<int> IntContainer; 
    typedef IntContainer::iterator IntIterator; 

    IntContainer vw; 

    IntIterator i = find(vw.begin(), vw.end(), 5); 

    if (i != vw.end()) 
     { 
     printf("Find 5 in vector\n"); // found it 
     } 
     else 
     { 
      printf("Couldn't find 5 in vector\n"); // couldn't found it 
     } 

    return 0; 
} 

我尝试用gcc 4.7.1编译它在Ubuntu并得到以下错误:

vec_test.cpp: In function ‘int main()’: 
vec_test.cpp:27:46: error: no matching function for call to ‘find(std::vector<int>::iterator, std::vector<int>::iterator, int)’ 
vec_test.cpp:27:46: note: candidate is: 
In file included from /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../../include/c++/4.7.1/bits/locale_facets.h:50:0, 
       from /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../../include/c++/4.7.1/bits/basic_ios.h:39, 
       from /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../../include/c++/4.7.1/ios:45, 
       from /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../../include/c++/4.7.1/ostream:40, 
       from /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../../include/c++/4.7.1/iostream:40, 
       from vec_test.cpp:3: 
/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../../include/c++/4.7.1/bits/streambuf_iterator.h:371:5: note: template<class _CharT2> typename __gnu_cxx::__enable_if<std::__is_char<_CharT2>::__value, std::istreambuf_iterator<_CharT2, std::char_traits<_CharT> > >::__type std::find(std::istreambuf_iterator<_CharT2, std::char_traits<_CharT> >, std::istreambuf_iterator<_CharT2, std::char_traits<_CharT> >, const _CharT2&) 
/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.1/../../../../include/c++/4.7.1/bits/streambuf_iterator.h:371:5: note: template argument deduction/substitution failed: 
vec_test.cpp:27:46: note: ‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’ is not derived from ‘std::istreambuf_iterator<_CharT2, std::char_traits<_CharT> >’ 

此代码不执行任何操作,因为矢量未用任何内容初始化,但应编译。

我怀疑这是一个海湾合作委员会的问题,但经过大量的挖掘我绝望地退出。 请让我知道如果有人遇到这个问题,并知道如何解决它。

+0

[Works in IDEone](http://ideone.com/5znvNJ)和[在我的Mac上](http://dl.dropbox.com/u/4960980/Screen%20Shot%202013-03-07% 20at%2012.53.18%20 PM.png)以及'clang ++'。 – 2013-03-07 11:52:24

+0

我怀疑Orit是否有你没有的gcc问题:) – Nitay 2013-03-07 12:07:11

回答

0

也许某个文件定义了一个函数在全局命名空间中找到

您是否试过指定全范围?也就是说,std ::找到而不是找到。它可以帮助deleting that weird line

using namespace std; 

但是,这不是我所期望的。我会称它为一个错误。

相关问题