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

模板函数声明为void-代码不起作用?

梁丘安晏
2023-03-14
#include <iostream>
#include <string>

template<int T, int U>
void foo(T a, U b)
{
    std::cout << a+b << std::endl;
}

int main() {
    foo(2,4);
    return 0;
}

我发现以下错误:

错误:变量或字段“foo”声明为void

错误:“a”之前应为“)”

错误:在'b'之前预期')'

在函数“int main()”中:错误:“foo”未在此范围内声明

共有2个答案

董高朗
2023-03-14

模板参数可以是整数,例如:

template<int A, int B>
void bar()
{
    std::cout << A+B << std::endl;
}

但是,您似乎希望根据参数的类型而不是整数值对方法进行参数化。正确的模板如下:

template<typename T, typename U>
void foo(T a, U b)
{
    std::cout << a+b << std::endl;
}

int main() {
    bar<2,4>();
    foo(2,4);     // note: template parameters can be deduced from the arguments
    return 0;
}
丁勇
2023-03-14

模板中的T和U不是类型。您需要将其更改为:

template<typename T, typename U>
void foo(T a, U b) {
}
 类似资料:
  • 我有一个全局函数是这样的: 然后在另一个类中,我要将这个函数声明为的朋友。所以我做了: 现在,当我调用时,它无法编译,错误是foo无法访问的私有构造函数。我无法理解该错误,如何正确声明为的朋友? 提前道谢。

  • 本题部分基于加速C++[1]中的练习15-4和那本书中的代码。我想将函数声明为类的朋友,以便它能够访问私有成员。函数被声明为模板,但我不想让所有可能的函数访问私有成员,只允许那些与该类关联的函数访问。 其他文件: 另一个假设的函数可以调用对象的方法,但我希望限制对的私有访问。有没有办法做到这一点,还是我想多了,这种情况在实践中永远不会发生?我应该使用模板专门化吗? [1]Koenig,A.和Moo

  • 我有一个类模板和一个函数模板定义了一个,它引用要绑定到的模板类型。 我想要的是将< code>make_obj函数声明为< code>friend,这样它可以创建< code>Obj的,但是其他人不能(除了通过copy ctor)。 我尝试了几个朋友声明,包括 和 后者是使< code>make_obj的所有模板实例化成为< code>Obj类的朋友的不太理想的尝试。然而,在这两种情况下,我得到相

  • 模板特化可以被显式声明,这可以作为消除多重实例化的一种方式。例如: #include "MyVector.h" extern template class MyVector<int>; // 消除下面的隐式实例化 // MyVector 类将在“其他地方”被程序员显式实例化 void foo(MyVector<int>& v) { //在这个地方使用vector类型 } 下列代码就是上例

  • 我目前有一个,但是为了灵活性,我希望能够分配一个lambda表达式,将作为映射中的值返回。 所以我创建了这个模板类: 并像这样使用它: IntelliSense提供了更多信息: 多个操作符“=”匹配这些操作数:function“valueorfunction::operator=(const std::function&other)[with T=std::wstring]”function“va