c++ - 类内成员初始化是否删除赋值运算符?

标签 c++ c++11 constructor

所以我正在做一个包含 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/

相关文章:

c++ - 如何在 .hpp/.cpp 文件中定义/声明类实例?

c++ - 在后端运行成员函数而不减慢主应用程序的技巧是什么?

c++ - 如何使用 enable_if 来限制整个类(class)

c++ - analogRead 在库中返回 0

java - 为什么在 Java (BlueJ) 中使用 ArrayList 作为构造函数参数?

java - 使用泛型处理构造函数中的类型删除

c++ - 可以使用placement-new 和vector::data() 替换 vector 中的元素吗?

C++:重载New调用自动构造对象

c++ - 在不同的类上调用不同的成员函数

c++ - 使用(连同)realloc 调用构造函数