C ++错误:没有匹配的函数来调用'print_size'

孤独的学习者

我有这个代码:

#include <iostream>
#include <vector>

template<typename T>
void print_size(std::vector<T> a)
{
    std::cout << a.size() << '\n';
}

int main()
{
    std::vector<int> v {1, 2, 3};
    print_size(v);

    auto w = {1, 2, 3};
    // print_size(w); // error: no matching function for call to 'print_size'
                      // candidate template ignored: could not match 'vector' against 'initializer_list'
}

...可以编译并运行,没有任何问题。但是,如果启用注释行,则会产生错误no matching function for call to 'print_size'

我想知道在C ++ 11和更高版本中编写此代码的正确方法是什么。

songyuanyao

对于willauto w = {1, 2, 3};的类型,由于无法推断出模板参数失败模板参数推导不考虑隐式转换。wstd::initializer_list<int>print_size(w);T

类型推导不考虑隐式转换(上面列出的类型调整除外):这是超载解析的工作,稍后会发生。

您可以显式指定模板参数,

print_size<int>(w);

或者你可以w成为一个std::vector<int>替代者。如果您坚持使用auto,则需要明确指定类型。

auto w = std::vector<int>{1, 2, 3};
print_size(w);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

发生没有匹配的函数来调用C ++中的错误

C ++错误::没有匹配的函数来调用'function'

Libtorch C++ - 没有匹配的成员函数来调用 InterpolateFuncOptions 的“size”

C ++:没有匹配的函数来调用

C ++ Boost Geometry错误:没有匹配的函数来调用“ assertion_failed”

C ++错误:没有匹配的函数来调用'simplex615 <arbitraryFunc> :: amoeba

C ++-没有匹配的函数来调用'getaddrinfo'

C ++线程-没有匹配的函数来调用

C ++错误没有匹配的调用函数

c ++:函数“没有匹配的函数可调用”错误

C ++没有匹配函数来调用向量push_back

vscode中的C ++:错误:没有匹配的构造函数来初始化'std :: thread'

C ++错误没有匹配函数调用静态模板方法

C ++ Lambda-错误:没有匹配的函数可调用

C ++结构错误“没有匹配的调用函数...”

我正在尝试学习如何在c ++中传递指针,但出现错误:没有匹配的函数来调用'test'。我究竟做错了什么?

list1.erase( hash1.find ( p) ); 没有匹配的函数来调用“擦除”C++

C ++:没有匹配的函数可调用''

C ++模板:没有匹配的调用函数

C++ - 没有匹配的函数调用

C ++中的可调用类对象:没有匹配的函数来调用'std :: tuple <T> :: tuple(<括号包围的初始化程序列表>)'

C++泛型方法给出“没有匹配的调用函数”错误

C ++中的多线程处理时出现“没有匹配的函数调用”错误

如何编译程序时出现错误“没有匹配的函数调用'to_string'”?C++

C ++类错误信息:没有匹配的调用函数

编译错误:“没有匹配函数调用'std :: vector <Card *> :: insert(int,Card *&)'” C ++

C++ string.replace 生成“没有匹配的调用函数”错误

没有解决错误“函数调用不匹配”C++

错误:没有用于调用“std::vector<Movie>::erase(size_t&)”的匹配函数