我有一个带有朋友点类的矩形类。我正在使用笛卡尔坐标,所以我将在矩形类中有四个点。这些点在点类中定义。在源文件中定义矩形构造函数时,我得到错误(在注释中标记):
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("");
}
}
答案 0 :(得分:0)
删除构造函数声明中的星号。
向前声明Point,或在Rectangle之前声明Point。
你也不应该在头文件中使用“using namespace”。
答案 1 :(得分:0)
您的Rectangle
构造函数中出现了编译器错误,因为在头文件中未声明使用了Point
,您需要先定义Point
类,或者只是转发 - {声明:
class Point;
friend class
或friend
通常是为了让访问类私有成员的内容,例如如果你想要一个全局函数来访问类私有成员,你可以这样做:
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