编译器错误:找不到匹配的函数

Compiler Error: No matching function for call to find

本文关键字:函数 找不到 错误 编译器      更新时间:2023-10-16

我试图使用向量,因为我刚刚开始学习,但被困在这个错误。我试着看cpp参考并在上面写,但仍然得到错误。

 #include<vector>
 #include<iostream>
 #include<cstring>
 using namespace std;
 int main()
{
vector<string> vec;
vec.push_back("First");
vec.push_back("second");
for( int i = 0; i < 4 ; i++ )
    vec.push_back("RepeatTimes");
vector<string>::iterator fp = find(vec.begin(), vec.end(), "First");

for( vector<string>::iterator it = vec.begin(); it != vec.end(); it++ )                  cout<<*it<<" ";
}

错误是:

[Error] no matching function for call to 'find(std::vector<std::basic_string<char> >::iterator, std::vector<std::basic_string<char> >::iterator, const char [6])'

您忘记包含std::find所在的<algorithm>标头。

您还应该包含<string>以访问std::string
您很可能间接地从另一个标头包含了<string>,不应该依赖它。


既然您正在学习,我将进一步建议您的代码的现代替代方案。

  1. 与每次推回一个元素不同,

    std::vector<std::string> vec;
    vec.push_back("First");
    vec.push_back("second");
    

    可以使用初始化列表:

    std::vector<std::string> vec {"First", "Second"};
    
  2. 不使用for循环来重复添加相同的元素,

    for( int i = 0; i < 4 ; i++ )
        vec.push_back("RepeatTimes");
    

    可以使用insert方法:

    vec.insert(vec.end(), 4, "RepeatTimes");
    
  3. 考虑在冗长且没有给代码增加可读性值的情况下推导类型名:

    auto fp = std::find(vec.begin(), vec.end(), "First");
    
  4. 在容器的整个范围内迭代时使用基于范围的for循环:

    for (auto it: vec){
        std::cout << it << " ";
    }
    

添加:

#include <algorithm>

解决了我的问题