2017-10-06 2 views
0

Ich erhalte die Fehlermeldung „Zuordnung der unvollständigen Typ“, wenn ich versuche ContestantInfo *contestantStructArray = new ContestantInfo [numberOfContestants];Dynamische Struct Array Fehler

Heres mein Code zu erstellen:

innerhalb Struct ContestantInfo
#include <fstream> 
#include <iostream> 

using namespace std; 

struct ContestantInfo; 

int main() 
{ 
    //opens all the files for input and output 
    fstream contestantsFile("contestants.txt", ios::in); 
    fstream answerKeyFile("answers.txt", ios::in); 
    fstream reportFile("report.txt", ios::out); 

    //used to determine how many contestants are in the file 
    int numberOfContestants = 0; 
    string temp; 

    //checks to see if the files opened correctly 
    if(contestantsFile.is_open() && answerKeyFile.is_open() && reportFile.is_open()){ 

     //counts the number of lines in contestants.txt 
     while(getline(contestantsFile, temp, '\n')){ 

      numberOfContestants++; 

     } 

     //Puts the read point of the file back at the beginning 
     contestantsFile.clear(); 
     contestantsFile.seekg(0, contestantsFile.beg); 

     //dynamic array that holds all the contestants ids 
     string *contestantIDNumbers = new string [numberOfContestants]; 

     //Reads from the contestants file and initilise the array 
     for(int i = 0; i < numberOfContestants; i++){ 

      getline(contestantsFile, temp, ' '); 

      *(contestantIDNumbers + i) = temp; 

      //skips the read point to the next id 
      contestantsFile.ignore(256, '\n'); 

     } 

     ContestantInfo *contestantStructArray = new ContestantInfo [numberOfContestants]; 

    } 
    else 
    { 
     cout << "ERROR could not open file!" << endl; 
     return 0; 
    } 

} 

struct ContestantInfo{ 

    string ID; 
    float score; 
    char *contestantAnswers; 
    int *questionsMissed; 

}; 

Die Zeiger werden soll schließlich zum Punkt auch dynamische Arrays, wenn sich daran etwas ändert. Ich bin ein Student, also halte dich nicht zurück, wenn ich etwas Dummes mache.

Antwort

1

Nach dem Compiler, Ihr Problem der Forward-Deklaration der Struktur ist (wie Sie versuchen, eine Reihe von ihnen zu schaffen). Sehen Sie diese Frage und die Antwort: Forward declaration of struct

Grüße

+0

Okay, ich verstehe diesen Beitrag grob. Können Sie vorschlagen, dass Code hinzugefügt wird, der das beheben würde, oder funktioniert das Erstellen eines dynamischen struct-Arrays einfach nicht? –

+0

@FinnWilliams Sicher, Sie müssen nur die Strukturdefinition vor dem Haupt setzen. – cnelmortimer

+0

Dummerweise einfacher Dankeschön. –

0

Gibt es einen Grund, warum Sie Zeiger verwenden müssen?

Es würde die Dinge einfacher für Sie machen, wenn Sie anstelle der dynamischen Array-Zuweisung mit neuen Standard-Vektoren verwenden.

In Ihrer Struktur könnten Sie einen Vektor haben, wenn ints und ein Vektor von Zeichenfolgen anstelle eines Zeigers auf ein Zeichen.

Sie können auch einen Vektor von Kandidateninformationen haben.

Sie brauchen sich dann keine Gedanken über die Ressourcenverwaltung zu machen und können sich von der Standardvorlagenbibliothek behandeln lassen.

Sehen Sie hier für weitere Informationen:

http://www.cplusplus.com/reference/vector/vector/

+0

Ja die Zuordnung uns nur uns dynamische Arrays beschränkt. –