所以我正在做一个包含 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。(该程序从文件中读取学生数据并将类(class)添加到学生成绩单中)。
我已经被困了一段时间了,谁能帮忙解决这个删除函数的错误?
如果您需要,这里是转录构造函数:
Transcript::Transcript()
{
courseCount = 0;
}
编辑:抄本原型(prototype)
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;
};
最佳答案
这与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
,都由 B
构造> 的构造函数的初始化列表,位于注释指示的位置。
到“a=A();”时发生这种情况,a
已经被构建,并且 a=A();
调用 A
的赋值运算符。
因为您的 Transcript
类有一个 const
类成员,所以它不能有默认赋值运算符。默认赋值运算符本质上是对每个类成员进行赋值,一个一个地赋值,但是因为您的一个类成员是const
,所以它不能被赋值,所以您应该实现自己的赋值运算符。
但是,很明显您打算声明一个静态常量类成员,在这种情况下:
static const int MAX_STUDENT_COUNT = 50;
这可能是您的类的赋值运算符(不是构造函数)已被删除的原因,并且您会收到此错误。
关于c++ - 类内成员初始化是否删除赋值运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35236204/