簡體   English   中英

Function 模板不起作用,出現錯誤“沒有合適的用戶定義的轉換”

[英]Function Template not working, getting error “No suitable user-defined conversion”

我正在嘗試在 function 模板上使用容器( std::vectorstd::liststd::map等...),但我不斷收到錯誤消息,提示“不存在合適的用戶定義轉換”

我嘗試制作一個不同的 function 模板,print_container 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM