C++ 声明为void的模板函数-代码不起作用?
我得到以下错误: 错误:变量或字段“foo”声明为无效 错误:应在“a”之前 错误:应在“b”之前 在函数“int main”中: 错误:“foo”未在此作用域中声明 模板中的T和U不是类型。您需要将其更改为: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
#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以获得非类型参数的一个很好的示例。第二个参数是数组的大小