函数模板不起作用,出现错误"No suitable user-defined conversion"
Function Template not working, getting error "No suitable user-defined conversion"
我正在尝试在函数模板上使用容器(std::vector
,std::list
,std::map
等...(,但我不断收到错误消息,说"不存在合适的用户定义转换">
我尝试制作一个不同的函数模板,print_container()
1 个参数,它可以工作。
#include "stdafx.h"
#include <iostream>
#include <vector>
template<typename T>
using Iterator = typename T::iterator;
template<typename C, typename V>
std::vector<Iterator<C>> find_all(C& container, V value) {
std::vector<Iterator<C>> res;
for (auto p = container.begin(); p != container.end(); ++p)
if ((*p) == value)
res.push_back(p);
return res;
}
int main() {
std::vector<int> vec1 = { 1, 2, 3 };
std::vector<Iterator<int>> res = find_all(vec1, 1); // does not work
return 0;
}
find_all()
应该返回只有 1 个迭代器的迭代器std::vector
,迭代器附加到vec1[0]
并将该向量分配给res
。
问题出在返回的类型中
std::vector<Iterator<int>> res = find_all(vec1, 1);
//...................^^^ wrong
从该调用中,您可以获得std::vector<int>
迭代器的向量,而不是int
std::vector<Iterator<std::vector<int>>> res = find_all(vec1, 1);
//...................^^^^^^^^^^^^^^^^ correct
为了避免这类问题,通常您可以使用auto
(从C++11开始(
auto res = find_all(vec1, 1);
返回类型是std::vector<Iterator<std::vector<int>>>
,而不是std::vector<Iterator<int>>
。
std::vector<Iterator<std::vector<int>>> res = find_all(vec1, 1);
在这种情况下,使用auto
更好。
auto res = find_all(vec1, 1);
此声明中迭代器的模板参数
std::vector<Iterator<int>> res = find_all(v, 1);
无效。类型int
没有迭代器。请参阅此别名声明
template<typename T>
using Iterator = typename T::iterator;
你应该写
std::vector<Iterator<std::vector<int>>> res = find_all(v, 1);
或
auto res = find_all(v, 1);
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- c++20[[no.unique_address]]中的新功能是什么
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- "no matching function for call to 'Vector::Vector'"错误
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 处理"no operator found"
- 我在 ifstream input_file(文件名)行中收到错误"no matching function to call";
- 如何解决"no Qt platform plugin could be initialized"问题?
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 为什么当我在 std::string 中打开文件名的 fstream 时出现"no matching function"错误?
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- do while 循环中的 if 语句以 yes 或 no 结尾
- 从 TVector2 类派生复杂类:"No matching function for call to Complex::Complex()"
- 错误消息:使用"string* +="后"no match for 'operator+='"
- Eulers 项目问题 no 345 听不懂几行代码
- "No-Const Pointer to Const "调用功能
- "No suitable conversion function from 'std::string' to 'const char *' exists"
- 函数模板不起作用,出现错误"No suitable user-defined conversion"
- 如何修复"no suitable conversion function from "字符串" to "常量字符* " exists"?