2016-12-28 92 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沒有理由使用非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()的定義。