2013-11-27 13 views
6
#include<iostream> 

using namespace std; 

class PhoneNumber 

{ 

    int areacode; 
    int localnum; 
public: 

    PhoneNumber(); 
    PhoneNumber(const int, const int); 
    void display() const; 
    bool valid() const; 
    void set(int, int); 
    PhoneNumber& operator=(const PhoneNumber& no); 
    PhoneNumber(const PhoneNumber&); 
}; 

istream& operator>>(istream& is, const PhoneNumber& no); 


istream& operator>>(istream& is, const PhoneNumber& no) 
{ 

    int area, local; 
    cout << "Area Code  : "; 
    is >> area; 
    cout << "Local number : "; 
    is >> local; 
    no.set(area, local); 
    return is; 
} 

tại no.set (khu vực, địa phương); nó nói rằng "đối tượng có loại vòng loại không tương thích với hàm thành viên"đối tượng có loại vòng loại không tương thích với chức năng thành viên

tôi nên làm gì đây ...?

Trả lời

8

Bạn đang đi qua no như const, nhưng bạn cố gắng để sửa đổi nó.

istream& operator>>(istream& is, const PhoneNumber& no) 
//-------------------------------^ 
{ 

    int area, local; 
    cout << "Area Code  : "; 
    is >> area; 
    cout << "Local number : "; 
    is >> local; 
    no.set(area, local); // <------ 
    return is; 
} 
6

Phương pháp set của bạn không phải là const (cũng không nên), nhưng bạn đang cố gọi nó trên đối tượng const.

Tháo const từ tham số để operator >>:

istream& operator>>(istream& is, PhoneNumber& no) 
2

Trong operator >> có tham số thứ hai với kiểu const PhoneNumber & không có nghĩa là nó là một đối tượng liên tục, Nhưng bạn đang cố gắng thay đổi nó sử dụng chức năng thành viên đề ra. Đối với các đối tượng const bạn có thể chỉ gọi các hàm thành viên có const định tính.

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