编译器错误:找不到匹配的函数
Compiler Error: No matching function for call to find
我试图使用向量,因为我刚刚开始学习,但被困在这个错误。我试着看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>
,不应该依赖它。
既然您正在学习,我将进一步建议您的代码的现代替代方案。
-
与每次推回一个元素不同,
std::vector<std::string> vec; vec.push_back("First"); vec.push_back("second");
可以使用初始化列表:
std::vector<std::string> vec {"First", "Second"};
-
不使用
for
循环来重复添加相同的元素,for( int i = 0; i < 4 ; i++ ) vec.push_back("RepeatTimes");
可以使用insert方法:
vec.insert(vec.end(), 4, "RepeatTimes");
-
考虑在冗长且没有给代码增加可读性值的情况下推导类型名:
auto fp = std::find(vec.begin(), vec.end(), "First");
-
在容器的整个范围内迭代时使用基于范围的
for
循环:for (auto it: vec){ std::cout << it << " "; }
添加:
#include <algorithm>
解决了我的问题
相关文章:
- 编译器找不到'aligned_alloc'函数
- 在 c++ 中找不到此函数的标识符
- LLVM 选择找不到函数传递
- 找不到 #define 的函数定义
- LD 找不到生成的函数
- C++线程找不到函数作为参数(链接器)
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- Javascript 找不到使用 emscripten 编译的导出 WASM 函数
- 给定一个 3 x 3 矩阵或任何 n x n 矩阵,为什么我的以下函数找不到对角线差异?
- QObject::连接不起作用 - 使用函数语法找不到信号
- VS 2017 C++编译器在 VS 2005 中找不到匹配函数
- 找不到如何创建使用指针、字符和 for 函数组合的程序
- 这个基于范围的'for'语句需要一个合适的函数,但找不到任何函数
- im调用函数时找不到标识符?
- 找不到使用 bitset 实例化模板函数的有效方法
- 如何修复找不到匹配的重载函数?
- ADL 找不到重载函数
- 构造函数找不到合适的定义,以及 100 个其他错误?
- 类函数找不到类定义的变量
- 平均函数找不到正确的平均c++