如何使用朋友类c ++

时间:2014-02-19 19:36:23

标签: c++

我有一个带有朋友点类的矩形类。我正在使用笛卡尔坐标,所以我将在矩形类中有四个点。这些点在点类中定义。在源文件中定义矩形构造函数时,我得到错误(在注释中标记):

  

Rectangle没有成员Rectangle

标题

using namespace std;

class Rectangle
{
public:
    Rectangle(Point, Point, Point, Point);
    friend class Point;
    ~Rectangle();
private:
    Point a;
    Point b;
    Point c;
    Point d;
};

class Point
{
public:
    Point(int, int);
private:
    int x;
    int y;
};

源:

Rectangle::Rectangle(Point v1, Point v2, Point v3, Point v4)    //error here
{

}

Point::Point(int value1, int value2)
{
    if (x <= 20 && y <= 20){
        x = value1;
        y = value2;
    }
    else{
        throw invalid_argument("");
    }
}

2 个答案:

答案 0 :(得分:0)

删除构造函数声明中的星号。

向前声明Point,或在Rectangle之前声明Point。

你也不应该在头文件中使用“using namespace”。

答案 1 :(得分:0)

您的Rectangle构造函数中出现了编译器错误,因为在头文件中未声明使用了Point,您需要先定义Point类,或者只是转发 - {声明:

class Point;

friend classfriend通常是为了让访问类私有成员的内容,例如如果你想要一个全局函数来访问类私有成员,你可以这样做:

class klass {
private:
   int v;
   friend ostream& operator<<(ostream& os, const klass& k);
};

ostream& operator<<(ostream& os, const klass& k)
{
   os << k.v;
   return os;
}

因此,根据您的目标,您需要friend class课程中的Point而不是Rectangle