我得到的两大错误是:
结构节点中未初始化的引用成员'使用' 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个小时,并且不知道如何修复它。
答案 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