2016-12-28 3 views
0

복사 생성자를 사용해야하는 프로그램을 작성하고 있습니다. 복사 생성자를 사용하는 것은 초보자이므로 복사 선언자와 복사 생성자의 사용이 유효한지 여부를 알지 못합니다.복사 생성자 구문 및 생성자 값 표시

여기에도 디스플레이 기능에 문제가 있습니다. 오류는 다음과 같습니다. 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; 
} 
+1

'void Student :: display_student() {...}'. 좋아하는 C++ 서적에서별로 좋지 않은 코드에 대해 더 자세히 설명합니다. – LogicStuff

답변

0

복사 생성자 서명은 일반적으로 const 참조를 사용합니다. 또한 복사 할당을 추가 할 수 있습니다

Student(const Student&) = default; 

: 귀하의 경우에, 당신은 기본 구현을 사용할 수 있습니다

Student& operator=(const Student&) = default; 
+0

[복사 생성자는 매개 변수로 'X'를 가질 수도 있습니다.] (http://eel.is/c++draft/class.copy#ctor-1). 내가 잘못? – skypjack

+0

@skypjack : 사실, 당신 말이 맞아요, 정보 주셔서 감사합니다. (그러나 OP가 non const 버전을 사용하는 이유는 없습니다) – Jarod42

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()에 대한 정의 만 제공했습니다.