2014-09-04 13 views
6

Đây là mã của tôi:Không thể tạo toán tử gán mặc định khi một thành viên lớp là một tài liệu tham khảo (trong C++)

class NO { 
    public: 
    NO(std::string& name):nameValue(name){}; 

    private: 
    std::string& nameValue;   // this is now a reference 

}; 

int main(){ 

    int b=10,c=20; 
    int& d=b; 
    d=c; 

    std::string p="alpha", q="beta"; 

    NO x(p), y(q); 
    x=y; 

    return 0; 

} 

tôi nhận được lỗi:

"non-static reference member ‘std::string& NO::nameValue’, can’t use default assignment operator" 

Tại sao tôi không thể tái -gán đối tượng với một thành viên tham chiếu khi tôi có thể thực hiện tương tự với một kiểu tích hợp?

cảm ơn

+0

Tôi cảm thấy như thế này sẽ hoạt động nhưng ... với ngữ nghĩa gì? những gì chúng ta phải mong đợi? 'x.nameValue' phải trỏ đến' y.nameValue' OR 'x.nameValue' phải sao chép giá trị' y.nameValue'? (sẽ giống như việc thực hiện 'p = q') –

Trả lời

4

Tham chiếu có thể được khởi tạo nhưng không được gán cho. Khi tham chiếu được khởi tạo, nó sẽ tiếp tục tham chiếu đến cùng một đối tượng miễn là nó tồn tại. Nếu bạn không định nghĩa toán tử gán, trình biên dịch sẽ tổng hợp một phép gán thành viên, nhưng trong trường hợp này là không thể, do đó trình biên dịch không thể/sẽ không tổng hợp được.

Bạn có thể tự định nghĩa toán tử gán. Đó là vào bạn để quyết định chính xác làm thế nào để đối phó với một thành viên đó là một tài liệu tham khảo. Hầu hết thời gian, bạn chỉ cần xác định đối tượng của mình để không chứa bất kỳ tham chiếu nào.

Khi bạn bắt đầu, việc sử dụng chính để tham chiếu gần như chắc chắn là thông số. Là thành viên của một lớp, họ không có ý nghĩa rất thường xuyên, và trong trường hợp hiếm hoi mà họ làm cho tinh thần, các đối tượng của lớp đó có lẽ không nên hỗ trợ phân công.

Các vấn đề liên quan