2013-12-09 55 views
4

在開始之前,我必須首先說明我已經研究了此錯誤的可能解決方案。不幸的是,它們都與不使用數組有關,這是我的項目需求。此外,我目前正在將CS入門,所以我的經歷幾乎沒有。錯誤:非POD元素類型'字符串'的可變長度數組

該數組的目的是從文件中收集名稱。因此,爲了初始化數組,我計算了名稱的數量並將其用作大小。問題是標題中提到的錯誤,但在仍然使用一維數組的情況下,我看不到解決方法。

的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 

每條線都是這樣的,有不同數量的學生。

什麼是另一種方法,我仍然可以流數據同時仍然使用數組的學生的名字?

+2

你有沒有考慮過使用'vector'? – nhgrif

+0

我見過其他解決方案之一的矢量,但我還沒有學到它。我試圖使用它,但我不太瞭解它,所以我無法使它工作。對不起,我們編輯了原來的代碼。這是studentID [numStudents],但這就是錯誤。 – hanipman

+1

你可能會更好地嘗試讓載體工作併發佈一個關於載體的問題...... – nhgrif

回答

25

一個數組必須聲明一個常數值,你不能使用一個變量。如果你想用變量聲明它,你必須使用動態分配的數組。

string studentID[numStudents]; //wrong 

string *studentID = new string[numStudents]; //right 

編輯:一定要釋放陣列一旦你完成了它

delete [] studentID 
1

變lengthed陣列不是語言的標準功能。你必須在堆上分配或創建一個向量或使用常量。

此外。我從Clang得到了這個錯誤信息,而g ++ - 4.9並沒有把它給我,編譯也沒問題。所以它是編譯器依賴的。

相關問題