我正在编写一个程序,我需要使用复制构造函数。由于我是使用复制构造函数的新手,我不知道我的声明和复制构造函数的使用是否有效?
另外在这里我面临显示功能的问题,错误是::
error: prototype for 'int Student::display_student()' does not match any in class 'Student'
。这是什么错误?
#include <string>
#include <iostream>
using namespace std;
class Student
{
private:
int rollno;
string name;
public:
Student();
Student(int x, string str);
Student(Student &s);
void display_student();
};
Student::Student()
{
rollno = 0 ;
name = "" ;
}
Student::Student(int x, string str)
{
rollno=x ;
name=str ;
}
Student::Student(Student &s)
{
rollno = s.rollno ;
name = s.name;
}
Student::display_student()
{
cout << "Student Name ::" << name << endl << "Student Roll No. ::" << rollno << endl;
}
int main()
{
Student A;
Student B(09,"Jhonny");
Student C(B);
A.display_student();
B.display_student();
C.display_student();
return 0;
}
答案 0 :(得分:1)
您没有在Student::display_student()
的定义中指定返回值。尝试:
void Student::display_student()
{
cout << "Student Name ::" << name << endl << "Student Roll No. ::" << rollno << endl;
}
编译器默认采用int Student::display_student()
。类声明包含void display_student()
的原型,但您只提供了函数int display_student()
的定义。
答案 1 :(得分:0)
复制构造函数签名通常使用const引用。在您的情况下,您可以使用默认实现:
Student(const Student&) = default;
您还可以添加副本分配:
Student& operator=(const Student&) = default;