C ++结构和类编译器错误

时间:2014-04-23 07:46:56

标签: c++ class struct compiler-errors abstract-data-type

我得到的两大错误是:

  

结构节点中未初始化的引用成员'使用' new'没有new-initializer。

  

要求会员' a_student' in'((得分*)this->得分:: sInfoHEAD',属于非班级类型'节点'。

我的.cpp文件是:

    #include "CS163Program1.h"
    using namespace std;

    score::score()
    {
      sInfoHEAD = '\0';
      profHEAD = '\0';
    }

   score::~score()
    {
      delete sInfoHEAD;
      delete profHEAD;
    }

   int score::insertEntry(studentInfo a_student)
   {
        if(!sInfoHEAD)
        {
             sInfoHEAD = new node;
             sInfoHEAD -> a_student = new studentInfo;

              sInfoHEAD.a_student -> firstName = new char[strlen(a_student.firstName)+1];
              strcpy(firstName, a_student.firstName);

              sInfoHEAD.a_student -> lastName = new char[strlen(a_student.lastName)+1];
              strcpy(lastName, a_student.lastName);

              sInfoHEAD.a_student -> program1_grade = a_student.program1_grade;
              sInfoHEAD.a_student -> program2_grade = a_student.program2_grade;
              sInfoHEAD.a_student -> program3_grade = a_student.program3_grade;
              sInfoHEAD.a_student -> program4_grade = a_student.program4_grade;
              sInfoHEAD.a_student -> program5_grade = a_student.program5_grade;
              sInfoHEAD.a_student -> midterm_grade = a_student.midterm_grade;
              sInfoHEAD.a_student -> final_grade = a_student.final_grade;
              sInfoHEAD.a_student -> labAttendance = a_student.labAttendance;
              sInfoHEAD -> next = NULL;
      }

}

我的.h文件是:

    #include <iostream>
    #include <cstring>
    #include <cctype>
    using namespace std;

    struct studentInfo
    {
      char * firstName;
      char * lastName;
      int program1_grade;
      int program2_grade;
      int program3_grade;
      int program4_grade;
      int program5_grade;
      int midterm_grade;
      int final_grade;
      int labAttendance;
      int total_grade;

    };

    class score
    {
      public:
              score();
              ~score();
              int insertEntry(const studentInfo  entry_name);
             int updateEntry(const studentInfo  entry_name);
              int displayAll();
              int displaySpecific(profDemo proficiency);
              int evaluate(profDemo proficiency);
              int buildTestStruct(const studentInfo & a_student);

      private:
              node * sInfoHEAD;
              node * profHEAD;


     };

任何帮助都会受到高度赞赏,我已经开始了3个小时,并且不知道如何修复它。

1 个答案:

答案 0 :(得分:4)

您的struct node似乎有一个参考成员,如:

struct node
{
    int& num;
};

该成员应该在构造函数的初始化列表中初始化。 (引用不能为空......)

struct node
{
    node( int& iNum ) : num( iNum ) {}

    int& num;
};

此外,您正在访问指针,如果它是一个值:

sInfoHEAD.a_student -> firstName

应该是:

sInfoHEAD->a_student -> firstName
//       ^^

最后,当您将对象作为参数传递时,尝试在可能的情况下将它们作为引用或const引用传递:

int insertEntry(const studentInfo  entry_name);

应该成为:

int insertEntry(const studentInfo& entry_name);
//                               ^

而且,就像我在评论中所说的那样:头文件中的using namespace std;不是一个好习惯。如果您愿意,可以阅读此内容:https://stackoverflow.com/a/5849668/1394283