所以我正在做一个包含Student,Address和Transcript课程的项目。
学生构造函数如下:
Student::Student(int eid, string first, string last, Address campusAddress,
Transcript transcript)
{
setEID(eid);
setFirst(first);
setLast(last);
setAddress(campusAddress);
this->transcript = transcript; //error that says:
"Transcript::operator=(const Transcript&)" (declared implicitly) cannot be referenced
-- it is a deleted function.
}
所以我认为我的Transcript构造函数出了问题。但是指令是将Transcript默认构造函数留空,除了将变量courseCount初始化为0.(程序从文件中读取学生数据并将课程添加到学生成绩单中)。
我已经被困了一段时间,任何人都可以帮忙解决这个删除的功能错误吗?
如果您需要,这是转录构造函数:
Transcript::Transcript()
{
courseCount = 0;
}
编辑:成绩单原型
class Transcript
{
public:
//Constructor
Transcript();
double computeGPA() const;
void addCourse(const string& course, const int hours, const string& grade);
string getCourse(int index) const;
string getGradeEarned(const int index) const;
int getCourseCreditHours(const int index) const;
int count() const;
string toString() const;
private:
const int MAX_STUDENT_COUNT = 50;
string courseTaken[50];
int courseCreditHours[50];
string gradeEarned[50];
int courseCount = 0;
int computeTotalCreditHours() const;
int computeTotalQualityPoints() const;
};
答案 0 :(得分:4)
这与Transcript
的构造函数无关。在报告错误时,未构造Transcript
类成员。它已经建成了。
class A {
public:
A() {}
// ...
};
class B {
int c;
A a;
public:
B() : c(0) // a gets constructed at this point
{
a=A();
}
};
这是一个类似于你的情况的例子。当构建B
的实例时,B
的所有a
类成员({1}}都由B
的构造函数&#39构建; s 初始化列表,在评论指示的位置。
到时候" a = A();"发生了,a
已经构建,a=A();
调用了A
的赋值运算符。
由于您的Transcript
类具有const
类成员,因此它不能具有默认赋值运算符。默认的赋值运算符实际上是逐个分配每个类成员,但由于其中一个类成员是const
,因此无法对其进行分配,因此您应该实现自己的赋值运算符。
但是,显然你想要声明一个静态const类成员,在这种情况下:
static const int MAX_STUDENT_COUNT = 50;
这可能是您的类的赋值运算符(不是构造函数)已被删除,并且您收到此错误的原因。
答案 1 :(得分:0)
使用构造函数初始化列表。
可能是这样的:
Student::Student(int eid, string first, string last, Address campusAddress, Transcript transcript) :
eid(eid), first(first), last(last), address(campusAddress), transcript(transcript) {
}
大多数C ++类实际上并不需要构造函数体中的任何内容,因为它们的所有成员都是以这种方式初始化的。