在开始之前,我必须首先说我已经研究过这个错误的可能解决方案。不幸的是,它们都与不使用数组有关,这是我的项目的要求。此外,我目前正在参加CS的介绍,所以我的经验几乎没有。
数组的目的是从文件中收集名称。因此,为了初始化数组,我计算名称的数量并将其用作大小。问题是标题中陈述的错误,但是在使用一维数组时我没有看到它的方法。
的main.cpp
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
#include <iostream>
#include "HomeworkGradeAnalysis.h"
using namespace std;
int main()
{
ifstream infile;
ofstream outfile;
infile.open("./InputFile_1.txt");
outfile.open("./OutputfileTest.txt");
if (!infile)
{
cout << "Error: could not open file" << endl;
return 0;
}
string str;
int numLines = 0;
while (infile)
{
getline(infile, str);
numLines = numLines + 1;
}
infile.close();
int numStudents = numLines - 1;
int studentGrades[numStudents][maxgrades];
string studentID[numStudents];
infile.open("./InputFile_1.txt");
BuildArray(infile, studentGrades, numStudents, studentID);
infile.close();
outfile.close();
return 0;
}
HomeworkGradeAnalysis.cpp
using namespace std;
void BuildArray(ifstream& infile, int studentGrades[][maxgrades],
int& numStudents, string studentID[])
{
string lastName, firstName;
for (int i = 0; i < numStudents; i++)
{
infile >> lastName >> firstName;
studentID[i] = lastName + " " + firstName;
for (int j = 0; j < maxgrades; j++)
infile >> studentGrades[i][j];
cout << studentID[i] << endl;
}
return;
}
HomeworkGradeAnalysis.h
#ifndef HOMEWORKGRADEANALYSIS_H
#define HOMEWORKGRADEANALYSIS_H
const int maxgrades = 10;
#include <fstream>
using namespace std;
void BuildArray(ifstream&, int studentGrades[][maxgrades], int&, string studentID[]);
void AnalyzeGrade();
void WriteOutput();
#endif
文本文件格式简单:
Boole, George 98 105 0 0 0 100 94 95 97 100
每一行都是这样,有不同数量的学生。
在仍然使用数组的情况下,我仍然可以流式传输学生姓名的另一种方法是什么?
答案 0 :(得分:26)
必须使用常量值声明Array,不能使用变量。如果你想使用变量声明它,你必须使用动态分配的数组。
string studentID[numStudents]; //wrong
string *studentID = new string[numStudents]; //right
编辑:一旦完成,请务必释放阵列
delete [] studentID
答案 1 :(得分:1)
可变长度数组不是该语言的标准功能。您必须在堆上进行分配或创建向量或使用常量。
除了。我从Clang得到了这个错误信息,而g ++ - 4.9确实没有给我,编译还可以。所以它依赖于编译器。