Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 声明为void的模板函数-代码不起作用?_C++_Templates - Fatal编程技术网

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

C++ 声明为void的模板函数-代码不起作用?,c++,templates,C++,Templates,我得到以下错误: 错误:变量或字段“foo”声明为无效 错误:应在“a”之前 错误:应在“b”之前 在函数“int main”中: 错误:“foo”未在此作用域中声明 模板中的T和U不是类型。您需要将其更改为: #include <iostream> #include <string> template<int T, int U> void foo(T a, U b) { std::cout << a+b << std::en

我得到以下错误:

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

错误:应在“a”之前

错误:应在“b”之前

在函数“int main”中: 错误:“foo”未在此作用域中声明

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

#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;
}
模板中的T和U不是类型。您需要将其更改为:

#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;
}

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

template<typename T, typename U>
void foo(T a, U b) {
}
然而,您似乎希望根据参数的类型而不是整数值对方法进行参数化。正确的模板如下所示:

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

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

template<typename T, typename U>
void foo(T a, U b) {
}
然而,您似乎希望根据参数的类型而不是整数值对方法进行参数化。正确的模板如下所示:

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

模板不是这样工作的。您的模板参数是类或类型名,而不是int。@SamVarshavchik如果我想指定这两个参数都是int怎么办?显然,我可以创建一个标准函数,但是可以使用模板来完成吗?因为T不是类型,所以foo不能是函数。因此,它必须是一个变量,void不是变量的有效类型。注意,模板int variableT;是C++14中的有效声明。@grizloni97如果要指定两个参数都是int,则不应使用模板函数。如果希望两个参数都是int,则只需声明一个带有两个int参数的普通函数即可。就这样。这就是普通函数的用途。这不是模板的用途,也不是模板的工作方式。您的模板参数是类或类型名,而不是int。@SamVarshavchik如果我想指定这两个参数都是int怎么办?显然,我可以创建一个标准函数,但是可以使用模板来完成吗?因为T不是类型,所以foo不能是函数。因此,它必须是一个变量,void不是变量的有效类型。注意,模板int variableT;是C++14中的有效声明。@grizloni97如果要指定两个参数都是int,则不应使用模板函数。如果希望两个参数都是int,则只需声明一个带有两个int参数的普通函数即可。就这样。这就是普通函数的用途。这不是模板的用途。谢谢!我知道模板的用途是泛型,但实际上我想知道传递两个int的语法是什么,这是答案的第一部分。@grizloni97非类型参数并不少见,但它们也不是最常见的。您可以查看std::array以获得非类型参数的一个很好的示例。第二个参数是ArrayTank的大小!我知道模板的用途是泛型,但实际上我想知道传递两个int的语法是什么,这是答案的第一部分。@grizloni97非类型参数并不少见,但它们也不是最常见的。您可以查看std::array以获得非类型参数的一个很好的示例。第二个参数是数组的大小