动态结构阵列错误

时间:2017-10-06 07:01:21

标签: c++ arrays struct dynamic-arrays

当我尝试创建ContestantInfo *contestantStructArray = new ContestantInfo [numberOfContestants];时,我收到错误“分配不完整类型”

继承我的代码:

#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;

};

Struct ContestantInfo内的指针最终应该指向动态数组,如果它改变了什么。我是学生,所以如果我做些蠢事,请不要退缩。

2 个答案:

答案 0 :(得分:1)

根据编译器,你的问题是struct的前向声明(当你尝试创建它们的数组时)。请参阅此问题及其答案:Forward declaration of struct

此致

答案 1 :(得分:0)

你有什么理由需要使用指针吗?

如果您使用std向量而不是使用new进行动态数组分配,那么对于您来说会更直接。

在你的结构中你可以有一个向量if int和一个字符串向量而不是一个指向char的指针。

你也可以有一个参赛者信息矢量。

然后您不必担心资源管理,可以让标准模板库处理它。

有关详细信息,请参阅此处:

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