【问题标题】:C++ declaration errorC++ 声明错误
【发布时间】:2016-04-11 20:36:19
【问题描述】:

我目前正在处理数组并在数组之间移动数据,但是,这不是问题出在我的 void 函数中,更具体地说是我的 for 循环,我不知道为什么它看起来正确时无法编译对我来说,我在老师的笔记中看到,可以在 void 函数的 for 循环中声明一个整数,但仍然会收到错误。

错误: 练习11.cpp:49:12:错误:未在此范围内声明ânâ 对于(i=0;n=11;n

代码:

#include <iostream>
#include <string>
#include <cmath>
#include <cctype>
#include <iomanip>
#include <fstream>

using namespace std;

const int MAX = 20;

void reformat(double[], double[], int);
void sum(double[], double[], int);

int main()
{
  double input[MAX];
  double newarray[MAX];
  cout << fixed << right << setprecision(5);
  cout << "Morgan Kiger Lec#1002 Lab#1005 Exercise #11" << endl << endl;

  for (int i=0; i<MAX; i++)
    {
      cin >> input[i];
    }

  reformat(input, newarray, MAX);
  sum(input, newarray, MAX);

  return 0;
}


void reformat(double input[], double newarray[], int MAX)
{ 
  for(int i=0; int n=10; n<MAX; i++, n++)
    {
      newarray[n] = input[i]*2;
    }

  for(i=0; n=11; n<MAX; i++, n++)
    {
      newarray[i] = pow(input[n], 0.3);
    }

  return;
}

void sum(double input[], double newarray[], int MAX)
{
  double sum1;
  double sum2;

  cout << "Input Array" << setw(5) << "2nd Array" << endl;

  for(int i=0; i<MAX; i++)
    {
      sum1 = input[i] + sum1;
    }

  for(int i=0; i<10; i++)
    {
      sum2 = newarray[i] + sum2;
    }

  for(int i=0; i<MAX; i++)
    {
      cout << input[i] << setw(5) << newarray[i] << endl;
    }

  cout << "sum of input valves = " << sum1 << endl;
  cout << "sum of 1st 10 values in changed array = " << sum2 << endl;

 return;
}

【问题讨论】:

  • 标点符号的存在是有原因的。错误消息告诉你一切。在这个 for 循环的范围内没有声明“n”;前面的“n”仅限于声明它的 for 循环。

标签: c++ arrays function declare


【解决方案1】:

您的语法错误,因为只有 for 序言中的第一条语句是声明部分——您尝试使用两条语句来完成这项工作。

但是,您可以在单个语句中声明多个变量,这可能是您打算做的:

for (int i = 0, n = 10; n < NAX; i++, n++)
//   ^^^^^^^^^^^^^^^^^

现在,这些变量仅在循环期间存在。那是他们的“范围”。对于您的下一个循环,您必须再次声明它们。

所以,不要这样:

for(i=0; n=11; n<MAX; i++, n++)

重复上述步骤,用11 替换新声明中的10(如果这不是错字的话)。

另外,我相信你写的是input[i],而你的意思是input[n]。否则n 一开始就毫无意义。

【讨论】:

    【解决方案2】:
    void reformat(double input[], double newarray[], int MAX)
    { 
    for(int i=0; int n=10; n<MAX; i++, n++)
      {
      newarray[n] = input[i]*2;
      }
    
    for(i=0; n=11; n<MAX; i++, n++)
      {
      newarray[i] = pow(input[n], 0.3);
      }
    
      return;
    }
    

    当您在 for 块中声明变量时,就像您在此处对变量 i 所做的那样,它仅在下一个块的持续时间内存在。

    上面的第二个 for 块需要声明一个新的循环变量,因为第一个 i 不再存在,在它的块执行完成之后。

    【讨论】:

      【解决方案3】:

      reformatfor 循环中使用变量会遇到一些问题。

      for(int i=0; int n=10; n<MAX; i++, n++)
      

      不对。 for 循环不能有四个子句。你需要使用:

      for(int i=0, n=10; n<MAX; i++, n++)
      

      第二个问题是上述声明使in 仅在for 循环中有效。它们的作用域以for 循环结束。它们在第二个 for 循环中无效。它们需要在第二个for 循环中重新声明。

      for(int i=0, n=11; n<MAX; i++, n++)
      

      【讨论】:

        猜你喜欢
        • 2014-12-26
        • 1970-01-01
        • 2015-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-25
        • 1970-01-01
        相关资源
        最近更新 更多