未在范围内声明。多个错误

时间:2014-01-17 01:09:16

标签: c++ scope swap eof

出于某种原因,我不断收到范围错误。我继续得到多个范围错误以及。

#include<iostream.h>
#include<fstream.h>
#include<assert.h>

 void ScanInFile(int ScanInValues[], int *total)
{
   int i=0;

   while(!cin>>&ScanInValues[i].eof()){
      i++;
      *total = i;
   }

}

void SortFile(int DataSetValues[], int TotalValues)
{
   int i, j, temp;

   for(i = 0; i < (TotalValues - 1); i++){
      for(j=0; j < TotalValues - i -1; j++){

      if(DataSetValues[j] > DataSetValues[j+1]){
         temp = DataSetValues[j];
         DataSetValues[j] = DataSetValues[j+1];
         DataSetValues[j+1] = temp;
         }
      }
   }

}

int main(void)
{
   int i, AmountOfValues=0;
   int values[100]={ 0 };

 ScanInFile(values, &AmountOfValues);

 SortFile(values, AmountOfValues);

  for(i=0; i < AmountOfValues; i++){
  cout<<values[i];

   }
   cout<<endl;
   return 0;
}

出于某种原因,G ++不会编译该程序。我继续因为说endl和cout而出错,并且eof不在范围内。我哪里出错了?

2 个答案:

答案 0 :(得分:0)

这些对象在std命名空间内声明。要么在std::之前添加std::cout << ...,要么在cpp文件的开头添加using namespace std;

修复eof错误后,您还需要检查数组的超出访问权限,因为在写入之前从未检查过大小。

答案 1 :(得分:0)

除了Eric所说的,你的代码中还有更多问题需要指出。您编写此行的ScanInFile函数中有一个:

while (!cin >> &ScanInValues[i].eof())

这一行会编译,但它会做一些与你期望的完全不同的东西。我假设您正在此行上执行提取,但希望在尚未到达文件结尾时执行这些提取。由于流将通过隐式转换为布尔值来分析流状态本身,因此不需要.eof()。这样做:

while (cin >> ScanInValues[i])

我不想过度编译我的解释,但我只想强调这是执行提取的首选方式。使用!eof()作为提取条件几乎总是错误的方法。