该对象具有与成员函数不兼容的类型限定符

时间:2013-11-27 20:56:57

标签: c++

#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;
}

at no.set(area,local); 它表示“该对象具有与成员函数不兼容的类型限定符”

我应该怎么做......?

3 个答案:

答案 0 :(得分:10)

您将no作为const传递,但您尝试修改它。

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;
}

答案 1 :(得分:8)

您的set方法不是const(也不应该),但您尝试在const对象上调用它。

const从参数中移除到operator >>

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

答案 2 :(得分:3)

在运营商&gt;&gt;第二个参数类型为const PhoneNumber&amp;不,这是一个常量对象,但你试图使用成员函数集来改变它。对于const对象,您可以只调用具有限定符const的成员函数。