c++ 重载运算符[closed]时未声明标识符

vuktfyat  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(174)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
当试图在我的shape.cpp中重载operator<<时,它似乎无法识别类中的变量,即使它是类的friend
我的.cpp文件:

#include "Shape.h"

ostream& operator << (ostream& cout, const Shape& shapes)
{
    for (int i = 0; i < points.size(); i++) //points is undefined
    {
        cout << points[i] << endl; 
    }
}

我的.h文件:

#include <vector>
#include "Point.h"
#pragma once

using namespace std;

class Shape
{
    friend ostream& operator << (ostream& cout, const Shape& shapes);

    private:
        vector <Point> points; //Ordered list of vertices
};

我已经为我的point类使用了相同的重载,它工作得很好。

jhdbpxl9

jhdbpxl91#

friend函数不是类成员。它可以被视为任何其他非类函数。但由于它是friend,因此它可以访问其私有成员:

ostream& operator << (ostream& cout, const Shape& shapes)
{
    for (int i = 0; i < shapes.points.size(); i++)
    {
        cout << shapes.points[i] << endl; 
    }
}

现在应该很清楚了,对象是作为shapes参数传入的,它是points成员,因此,必须是shapes.points
然而,我们可以做得更好,使用范围迭代怎么样?

ostream& operator << (ostream& cout, const Shape& shapes)
{
    for (auto &v:shapes.points)
    {
        cout << v << endl; 
    }
}

相关问题