找不到匹配的重载函数C ++ TEMPLATE

重新调整使用变量模板调用C ++模板函数

void int void foo()
{

}

template <typename T, typename ...U> void foo()
{
    foo<U...>();
}

int main()
{
    foo<int, char, int>();
    return 0;
}

编译代码如:

错误C2672:'foo':没有匹配的重载函数找到注意:请参阅参考函数模板实例化'void foo(void)'正在编译注意:请参阅参考函数模板实例化'void foo(void)'正在编译注意:请参阅参考函数模板实例化'void foo(void)'被编译错误C2783:'void foo(void)':无法推断'T'的模板参数注意:参见'foo'

我宣布void foo(void),为什么发生错误? 编译器可以匹配模板void foo(),但不能匹配void foo(void)


假设你的基本情况是void foo() {} ,在你的递归情况下,你正在执行下面的函数调用:

foo<int, char, int>();
foo<char, int>();
foo<int>();
foo<>();

注意最后一次调用是foo<>(); 而不是foo(); 。 编译器错误是由于你的void foo() {}基本情况不能用foo<>();调用foo<>(); 句法。

链接地址: http://www.djcxy.com/p/66539.html

上一篇: No matching overloaded function found C++ TEMPLATE

下一篇: Call function with same name as method