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

时间:2017-11-17 01:48:34

标签: c++ c++11 templates

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

void int void foo()
{

}

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

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

编译meesage如:

错误C2672:'foo':找不到匹配的重载函数 注意:请参阅正在编译的函数模板实例化'void foo(void)'的引用 注意:请参阅正在编译的函数模板实例化'void foo(void)'的引用 注意:请参阅正在编译的函数模板实例化'void foo(void)'的引用 错误C2783:'void foo(void)':无法推断'T'的模板参数 注意:请参阅'foo'的声明

我声明了void foo(void),为什么会出错? complier可以匹配模板void foo(),但不能匹配void foo(void)

1 个答案:

答案 0 :(得分:4)

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

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

请注意,上次调用是foo<>();而不是foo();。 编译器错误是由于你的基本情况 无法使用void foo() {}语法调用foo<>();