【发布时间】:2019-09-10 16:35:44
【问题描述】:
我今天开始学习 C++ 中的模板,并尝试编写一个简单的代码。然后我想使用模板参数(a)在原始函数(函数)中编写另一个函数(显示),但我找不到正确定义“显示”函数的方法。有没有办法通过编译?或者我应该使用类模板(我还没有研究过,但如果需要,我会立即阅读相关资料)?顺便说一句,我的母语不是英语,所以我用了一个小翻译。我的某些描述可能看起来很奇怪,对此我很抱歉。
我了解到模板有它的变量范围,所以我尝试添加{},但它不起作用。更何况,我不想把代码复制到“函数”中,所以我不知道该怎么做。
template <typename T>
void function(T a[],int n)
{
cout<< "now you are in function." <<endl;
for(int i = 0; i < n; i++)
{
display(a,i);//Here I have to use "a"
cout << a[i] << " ";
}
cout << endl;
}
void display(T a[],int n)
{
cout << "now you are in display." << endl;
for(int i = 0; i < n; i++)
{
cout << a[n-i] << " ";
}
cout << endl;
}
编译器是这样说的: 错误:变量或字段“显示”声明为无效 无效显示(T a [],int n) 错误:未在此范围内声明“T” 但我不能在“显示”功能之前使用其他类型名。
【问题讨论】:
-
为什么你在
display之前没有template <typename T>,就像你对function所做的那样? -
不能在函数内直接创建函数。但不使用模板时也是如此。
-
你记得在调用之前声明
display函数吗? -
哦,当你开始学习更多关于 C++ 和模板的知识时,如果你真的想传递数组而不仅仅是指针,那么像
template<typename T, size_t N> void function(T (&a)[N]) { ... }这样的模板可能会更好。或者更好的是,不要使用 C 风格的数组和指针,使用std::array或std::vector。
标签: c++