Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.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++ 静态短引用在递归函数中产生错误_C++_Recursion - Fatal编程技术网

C++ 静态短引用在递归函数中产生错误

C++ 静态短引用在递归函数中产生错误,c++,recursion,C++,Recursion,以下是全部资料来源: #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 recu

以下是全部资料来源:

#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";    
    }
}
#包括
无效递归(静态短路和di);
使用名称空间std;
int main()
{
短pi=1;
对于(pi;pi>0;pi++)
{

不能为函数参数指定
静态
存储持续时间

您仍然可以将对
静态
变量的引用传递给函数,并且该引用仍将引用
静态
变量

例如:

int main()
{
   static short pi = 1;
// ^^^^^^
   for(pi; pi > 0; pi++)
   {
   cout << "Hi, pi!" << "\n";
   recursion(pi);
   }
// ...
}

void recursion(short &di)
{
// ...
}
这样声明的变量具有自动存储持续时间;这意味着当它“超出范围”时,对象将被销毁。如果要调用
foo()
100次:

int main()
{
  for (int i = 0; i < 100; ++i)
    foo();
}
以这种方式声明的变量在第一次使用之前将被初始化一次,并且即使在其超出范围后仍将继续有效。它将保留其值,直到重新分配,直到程序结束


您的代码:

int main()
{
    short pi = 1;
    for(pi; pi > 0; pi++)
    {
        cout << "Hi, pi!" << "\n";
        recursion(pi);
    }
}
intmain()
{
短pi=1;
对于(pi;pi>0;pi++)
{

cout错误消息非常明确;您不能为形式参数使用
静态
限定符;您需要声明

  void recursion(short &di);
然后再定义

  void recursion(short &di) {
    di++;
    if(di < 20)
      return;
    else
      cout << di << "\n";    
  }
void递归(short&di){
di++;
如果(di<20)
返回;
其他的

我完全不知道静态参数会读什么,会想什么——那个错误消息是非常琐碎的!
  void recursion(short &di);
  void recursion(short &di) {
    di++;
    if(di < 20)
      return;
    else
      cout << di << "\n";    
  }