这是我正在学习c ++的书中的一个问题。它只是说:
6.21-识别并纠正以下程序中的错误:
void p(int i)
{
int i = 5;
cout << "i is " << i << endl;
}
我不确定此代码有什么问题。我认为这可能与p的论点有关。当我尝试用崇高文本构建它时,它说 &#34;错误:重新定义&#39; i&#39;&#34;
如果有帮助,我们正在学习本地,静态和全局变量。
谢谢!
答案 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;无论传递给函数的是什么值。