当前位置: 首页 > 知识库问答 >
问题:

在C模板中找不到匹配的重载函数

计燕七
2023-03-14

使用变量模板递归调用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(vood)':注意:请参见正在编译的函式模板实例化'void foo(void)'的参考错误C2783:'void foo(void'):无法推断'T'的模板参数注意:参见“foo”的声明

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

共有1个答案

谷梁存
2023-03-14

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

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

请注意,最后一次调用是foo

 类似资料:
  • 从派生,并使用自定义结构对其进行专门化。也重载。然而,这才是问题的根源。如果我尝试编译它,我会得到: 显然,没有运算符“+”。但这是我的困惑…编译器被要求实现,因为这是继承的内容。但是,我从不使用或调用。那么编译器应该尝试生成这个基类函数吗?

  • 编译器输出: 18:4:错误:重新定义'模板T随机::get(T, T)'12:4:注意:'模板T随机::get(T, T)'之前在这里声明在函数'int main()': 28:44:错误:没有匹配函数调用'get(浮动,浮动)'28:44:注意:候选是: 12:4:注意:模板T随机::get(T, T)12:4:注意:模板参数推导/替换失败: 这项工作很好: 还有这个: 为什么编译器无法在第一

  • 以下是我的代码:< br > 一开始我只是重载了函数,发现有很多类似的代码。所以我正在考虑使用可变参数模板来获得更好的设计。(如果两个重载函数相似,如何做出更好的设计) 但是我不知道为什么会有错误:< br > main.cpp:27: 8:错误:没有匹配函数调用'getChar'ch=getChar(1, std::forward(str)...); 主要的cpp:37:2:注意:在函数模板专门

  • 模板函数与重载是密切相关的。从函数模板产生的相关函数都是同名的,因此编译器用重载的解决方法调用相应函数。 函数模板本身可以用多种方式重载。我们可以提供其他函数模板,指定不同参数的相同函数名。例如,图12.2的printArray函数模板可以用另一printArray函数模板重载,用参数lowSubscriPt和highSubscript指定要打印的数组部分(见练习12.4)。 函数模板也可以用其他

  • 我有一个rails应用程序,使用angularjs进行客户端开发。我尝试加载位于“app/assets/javascripts/templates/”中的模板: 但是我总是得到一个错误:错误:[$compile: tpload]未能加载模板:/index.html。 我试图将“templates”文件夹从javascripts-app/assets/templates中移出,并通过在config/

  • 目标 在这一章中,你将学习 使用模板匹配查找图像中的对象 你会学会这些函数:cv2.matchTemplate(),cv2.minMaxLoc() 理论基础 模板匹配是一种在较大图像中搜索和查找模板图像位置的方法。 OpenCV为此提供了一个函数cv2.matchTemplate()。它只是将模板图像滑过输入图像(就像2D卷积那样),并将模板图像和输入图像的一小块进行比较。在OpenCV中实现了几