静态短引用在递归函数中产生错误
Static short reference yields an error in recursive function
以下是整个来源:
#include <iostream>
void recursion(static short &di);
using namespace std;
int main()
{
short pi = 1;
for(pi; pi > 0; pi++)
{
cout << "Hi, pi!" << "n";
recursion(pi);
}
}
void recursion(static short &di)
{
di++;
if(di < 20)
{
return;
}
else
{
cout << di << "n";
}
}
出于某种原因,当16位容器不是静态的时,它可以正常工作,但我希望它是静态的,它会给出以下错误:
main.cpp:2:29:错误:存储类说明符在参数声明中无效void递归(静态短di);^main.cpp:2:29:错误:为参数"di"指定了存储类main.cpp:14:29:错误:存储类说明符在参数声明中无效void递归(静态短di)^main.cpp:14:29:错误:为参数"di"指定了存储类
不能为函数参数指定static
存储持续时间。
您仍然可以将对static
变量的引用传递给函数,该引用仍将引用static
变量。
例如:
int main()
{
static short pi = 1;
// ^^^^^^
for(pi; pi > 0; pi++)
{
cout << "Hi, pi!" << "n";
recursion(pi);
}
// ...
}
void recursion(short &di)
{
// ...
}
但在您的案例中,将pi
设为static
似乎毫无意义。
您可能不完全理解static
存储持续时间的含义,所以我可以自由解释。
通常,您声明的变量不带static
限定符,如下所示:
void foo()
{
int myValue = 42;
}
像这样声明的变量具有自动存储持续时间;意思是当它"超出范围"时,对象就被破坏了。如果您拨打foo()
100次:
int main()
{
for (int i = 0; i < 100; ++i)
foo();
}
则CCD_ 9将被重新初始化100次。通常这正是你想要的。
有时,您希望一个变量的寿命超过其声明的范围。为了实现这一点,您使用static
关键字:为其提供静态存储持续时间
void foo()
{
static int myValue = 42;
}
以这种方式声明的变量在首次使用前将被精确地初始化一次,并且即使在超出范围后也将继续存在。它将保留它的值,直到它被重新分配,直到程序结束。
您的代码:
int main()
{
short pi = 1;
for(pi; pi > 0; pi++)
{
cout << "Hi, pi!" << "n";
recursion(pi);
}
}
建立pi
变量,然后多次调用recursion
。这里pi
不需要静态存储持续时间,因为在调用recursion
的循环中,它永远不会超出范围。您所要做的就是将对pi
的引用传递给recursion
,它将按照您的意愿进行操作。
错误消息非常明确;形式参数不能有static
限定符;你需要申报
void recursion(short &di);
稍后定义
void recursion(short &di) {
di++;
if(di < 20)
return;
else
cout << di << "n";
}
- 任何人都可以查明我的递归函数中的错误吗?
- 如何修复递归函数导致的堆栈溢出错误?C++
- 使用递归函数 (c++) 将长字符串转换为整数时输出错误
- 我在具有递归函数的这部分代码中收到此错误
- 为什么当从递归函数返回字符串到C 中的Main时,我会得到分割错误
- 递归函数在数组中找到第一个错误
- 递归函数错误 1.
- 静态短引用在递归函数中产生错误
- 理解递归函数中的错误
- 递归函数调用时block_type_is_valid错误
- 我的二进制搜索树 c++ 的递归函数中的错误 C2784 无法推断模板参数
- 递归函数错误 Dev-C++
- 在递归函数中使用迭代器会导致分段错误
- 递归函数错误
- 递归C++函数中的堆栈溢出错误
- 递归函数中迭代器的 Seg 错误
- 递归函数导致返回错误 (c++)
- 字符串递归函数中的字符串错误
- 在另一个类的函数中返回一个类,反之亦然,编译错误(递归)
- 递归函数中的分段错误