类 "std::vector<cv::String, std::allocator<cv::String>>" 没有成员 "find"
时间: 2024-12-10 14:42:28 浏览: 29
您提到的`std::vector<cv::String, std::allocator<cv::String>>`是一个模板类型的`std::vector`,其中的元素类型是`cv::String`(很可能是OpenCV中的字符串类型),并且使用了`std::allocator<cv::String>`作为分配器。然而,`std::vector`标准库容器并没有直接提供名为`find`的成员函数,用于查找特定元素。
`std::vector`实际上有一个成员函数叫做`find_if()`,它可以接受一个谓词(predicate function),通过这个函数对容器中的每个元素进行判断。如果你想查找某个特定的`cv::String`元素,你可以自定义一个谓词函数,让它匹配你的需求。例如:
```cpp
bool isTarget(const cv::String& str) {
return str == "your_target_string";
}
auto it = std::find_if(VEC.begin(), VEC.end(), isTarget);
if (it != VEC.end()) {
// 成功找到,元素位于*it位置
} else {
// 没有找到
}
```
这里,`isTarget`是你需要创建的一个函数,它会检查给定的`cv::String`是否等于你的目标字符串。
相关问题
#0 0x00007f7bca8661b5 in *__GI_raise (sig=<value optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 #1 0x00007f7bca868f45 in *__GI_abort () at abort.c:121 #2 0x00007f7bcb0fadc5 in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/libstdc++.so.6 #3 0x00007f7bcb0f9166 in ?? () from /usr/lib/libstdc++.so.6 #4 0x00007f7bcb0f9193 in std::terminate() () from /usr/lib/libstdc++.so.6 #5 0x00007f7bcb0f928e in __cxa_throw () from /usr/lib/libstdc++.so.6 #6 0x00007f7bcb0f971d in operator new(unsigned long) () from /usr/lib/libstdc++.so.6 #7 0x00007f7bcd65d51a in __gnu_cxx::new_allocator<SLSZDDX>::allocate (this=0x7fff50282a10, __n=87012943743912979) at /usr/include/c++/4.4/ext/new_allocator.h:89 #8 0x00007f7bcd6542e7 in std::_Vector_base<SLSZDDX, std::allocator<SLSZDDX> >::_M_allocate (this=0x7fff50282a10, __n=87012943743912979) at /usr/include/c++/4.4/bits/stl_vector.h:140 #9 0x00007f7bcd649278 in std::vector<SLSZDDX, std::allocator<SLSZDDX> >::_M_insert_aux (this=0x7fff50282a10, __position=..., __x=...) at /usr/include/c++/4.4/bits/vector.tcc:322 #10 0x00007f7bcd644f81 in std::vector<SLSZDDX, std::allocator<SLSZDDX> >::push_back (this=0x7fff50282a10, __x=...) at /usr/include/c++/4.4/bits/stl_vector.h:741
这是一个代码堆栈,它显示了程序在运行时崩溃的位置和原因。具体来说,它显示了以下信息:
- 在raise.c文件的第64行,程序调用了raise函数来抛出一个信号。
- 在abort.c文件的第121行,程序调用了abort函数来终止程序的执行。
- 在libstdc++.so.6库中,程序调用了__gnu_cxx::__verbose_terminate_handler函数来处理异常终止。
- 在libstdc++.so.6库中,程序调用了std::terminate函数来终止程序的执行。
- 在libstdc++.so.6库中,程序调用了__cxa_throw函数来抛出一个异常。
- 在new_allocator.h文件的第89行,程序调用了operator new函数来分配内存。
- 在stl_vector.h文件的第140行,程序调用了_Vector_base::_M_allocate函数来分配内存。
- 在vector.tcc文件的第322行,程序调用了vector::_M_insert_aux函数来插入一项到vector中。
- 在stl_vector.h文件的第741行,程序调用了vector::push_back函数来向vector中添加一个元素。
根据这些信息,我们可以初步判断程序可能存在内存分配错误或越界访问等问题,需要进一步查看代码来进行排查。
error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class std::_List_iterator<class std::_List_val<class PartBaseInfo *,class std::allocator<class PartBaseInfo *> > > __cdecl PartBaseInfoSet::Begin(void)" (__imp_?Begin@PartBaseInfoSet@@QEAA?AV?$_List_iterator@V?$_List_val@PEAVPartBaseInfo@@V?$allocator@PEAVPartBaseInfo@@@std@@@std@@@std@@XZ)
这个错误是链接错误,提示无法解析外部符号。这通常是因为编译器找不到符号的定义。可能是因为你在使用某个函数或变量,但是没有包含相应的头文件或库文件,或者库文件没有正确链接。
针对你的问题,可能是你在使用PartBaseInfoSet类中的Begin函数,但是编译器找不到这个函数的定义。你需要检查你的代码,确认是否正确地包含了PartBaseInfoSet类的头文件,并且链接了相应的库文件。如果确认无误,还需要检查库文件是否正确地被加入到了链接器的输入文件列表中。
阅读全文