【问题标题】:C++ Error message " I was not declared in this scope" [closed]C++ 错误消息“我没有在这个范围内声明”[关闭]
【发布时间】:2026-01-23 09:45:01
【问题描述】:
#include <stdio.h>
void fun1 (int a [], int length)
{int i;
for (i = 0; i<length; i++)
    a[i] = a[i] =a[i];
length = 2 * length;
return; }

int main()
{int b[5] = {2, 3, 4, 5, 6};
fun1 (b, b[1]);
for (i = 0; i<5; i++) // <-- ERROR HERE!
    printf("%d ", b[i]);
return 0; }

在函数'int main()'中:
[错误] 'i' 未在此范围内声明

我有这个错误弹出,我不知道解决方案是什么。

【问题讨论】:

  • 请将您的代码/错误发布为文本,而不是图像。对于由于某种原因看不到图像的人,您的问题是无法回答的。我们也无法从图像中复制文本,这使我们无法调试您的代码,即帮助您。
  • 你知道如何声明一个变量吗?你同意i 没有被声明为main 范围内的任何类型的变量吗?
  • 仅供参考,a[i] = a[i] =a[i]; 实际上是一个空操作,因为结果与输入相同。也许您的意思更像是a[i] = i;?此外,length = 2 * length; 的结果随后会立即被丢弃,这也有效地使其成为空操作。另外,在fun1 (b, b[1]); 中,b[1]3,所以你告诉fun1() a[] 有3 个元素,但它实际上是5 个元素。你确定这是你真正想要的吗?整个代码毫无意义。

标签: c++


【解决方案1】:

fun1()i 声明为局部变量:

void fun1 (int a [], int length)
{int i; // <-- HERE
for (i = 0; i<length; i++)
    a[i] = a[i] =a[i];
length = 2 * length;
return; }

函数内部的局部变量不能被其他函数访问,除非它们被显式传递。因此,在这种情况下,main() 无法访问fun1() 中的i(也不应该)。

您看到的错误仅仅是因为main() 试图使用自己的i 而没有先声明它。在声明之前你不能使用它。因此,您只需添加该声明,例如:

int main()
{int b[5] = {2, 3, 4, 5, 6};
int i; // <-- ADD THIS!
fun1 (b, b[1]);
for (i = 0; i<5; i++) // <-- OK NOW!
    printf("%d ", b[i]);
return 0; }

或者,您应该养成在循环声明本身内声明循环计数器变量的习惯,例如:

void fun1 (int a [], int length)
{for (int i = 0; i<length; i++) // <-- OK!
    a[i] = a[i] =a[i];
length = 2 * length;
return; }

int main()
{int b[5] = {2, 3, 4, 5, 6};
fun1 (b, b[1]);
for (int i = 0; i<5; i++) // <-- OK, TOO!
    printf("%d ", b[i]);
return 0; }

【讨论】:

    【解决方案2】:

    试试这个:

      for (int i=0;i<length;i++)
    

    【讨论】:

    • @SippinSizzurp It works fine for me
    • @SippinSizzurp 是的。 See for yourself
    • 或许一句解释也无妨。
    • “不工作”对于给任何人的问题描述不够充分,希望得到解决方案。
    • 虽然这段代码可以解决问题,但如果解释一下它的作用方式/原因,答案会好得多。请记住,您的答案不仅适用于提出问题的用户,还适用于所有其他找到该问题的人。