我继续得到错误:当我运行此代码时重新定义'i'。对局部变量的误解

时间:2015-03-01 00:52:03

标签: c++

这是我正在学习c ++的书中的一个问题。它只是说:

6.21-识别并纠正以下程序中的错误:

void p(int i)

{
    int i = 5;
    cout << "i is " << i << endl;

}

我不确定此代码有什么问题。我认为这可能与p的论点有关。当我尝试用崇高文本构建它时,它说 &#34;错误:重新定义&#39; i&#39;&#34;

如果有帮助,我们正在学习本地,静态和全局变量。

谢谢!

3 个答案:

答案 0 :(得分:1)

该代码违反了C ++ 11标准第四版2014-12-15(以及之前的版本,但这是我现有的版本)。具体而言,第3.3.3节第2段规定:

“函数参数名称(包括一个出现在lambda声明符中)或函数定义中的函数本地预定义变量(8.4)的潜在范围从声明点开始。如果函数有函数-try-block参数或函数的潜在范围 - 本地预定义变量在最后一个关联的处理程序的末尾结束,否则它在函数定义的最外层块的末尾结束。参数名称不得重新声明在函数定义的最外面的块中,也不在与函数try-block关联的任何处理程序的最外面的块中。“

最后一句陈述了要求。

答案 1 :(得分:0)

通过声明int i = 5,您尝试将新变量引入已具有该名称的范围(来自参数列表)。这是一个错误。

没有任何背景是不可能任意地修复&#34;功能,但你可以不同:

  • 删除int i = 5
  • 删除参数int i
  • 重命名

答案 2 :(得分:-1)

有两个有冲突的i,因此该参数将始终被忽略。

此功能将始终打印出来&#34;我是5&#34;无论传递给函数的是什么值。