gpt4 book ai didi

c++ - 函数模板不起作用,出现错误 "No suitable user-defined conversion"

转载 作者:太空宇宙 更新时间:2023-11-04 15:55:50 24 4
gpt4 key购买 nike

我正在尝试使用容器(std::vectorstd::liststd::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() 应返回迭代器的 std::vector 只有 1 个迭代器,迭代器附加到 vec1[0] 和将该 vector 分配给 res

最佳答案

问题出在返回类型上

std::vector<Iterator<int>> res = find_all(vec1, 1);
//...................^^^ wrong

从该调用中,您可以获得 std::vector<int> 的迭代器 vector , 不属于 int

std::vector<Iterator<std::vector<int>>> res = find_all(vec1, 1);
//...................^^^^^^^^^^^^^^^^ correct

为了避免这类问题,通常你可以使用auto (从 C++11 开始)

auto res = find_all(vec1, 1);

关于c++ - 函数模板不起作用,出现错误 "No suitable user-defined conversion",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58222954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com