c++ 请问error C2228: “.gety”的左边必须有类⼀结构⼀联合 1> 重载<<时,为什么不能用p.x p.y来调用x,y?

2024-12-30 00:04:10
推荐回答(3个)
回答1:

#include
#include

class point 
{
public:
point(float a,float b):x(a),y(b){}
point(){x=0;y=0;}   
void setpoint(float a,float b)
{
x=a;
y=b;
}
float getx() const
{return x;} 
float gety() const
{return y;}

friend ostream& operator<<(ostream&,const point&);

private:
float x,y;
};

ostream& operator<<(ostream& output,const point& p)
{   
output<<"point:";
output<<'[';
output< output<<',';
output< output<<']'< return output;
}

int main()
{
point p(3.5f,4.3f),q;
cout< q.setpoint(2.2f,7.9f);
cout< cout< return 0;
}


如果你使用是VC6编译器,需要把

#include

using namespace std;

换成#include

否则不支持有元


另外程序中也有问题。

错误:

重载操作符“<<”后,使用"<<"普通功能和你重载功能的语句要分开来写,如output<<'['<

output<<'[';

output<

output<<',';

output<

output<<']'<

否则编译器无法统一


警告:

系统中默认的小数都是双精度类型的,如果要使用单精度类型,需要标明,如3.14是双精度类型,而3.14f就是单精度类型的,详细的更改见上边的程序,希望对你有帮助

回答2:

操作符<<重载的时候,不能访问到p.x和p.y,要把x,y放到类的public里面.

#include
#include
using namespace std;
class point {
public:
    point(float a, float b) :x(a), y(b){}
    point() 
    {
        x = 0; y = 0;
    }
    void setpoint(float a, float b)
    {
        x = a; y = b;
    }
    float getx() const{ return x; }
    float gety() const{ return y; }
    friend ostream& operator<<(ostream&, const point&);
    //protected:
    float x, y;
};

ostream& operator<<(ostream& output, point& p)
{
    output << "point:";
    output << '[' << p.x << ',' << p.y << ']' << endl;
    return output;
}

int main(){
    point p(3.5, 4.3), q;
    cout << p;
    q.setpoint(2.2, 7.9);
    cout << q.getx() << endl;
    cout << q.gety() << endl;
    return 0;
}

回答3:

类的对象只能访问他的公有成员,私有成员和保护成员不能直接访问。