I want to find the distance between two points. In class point
, the parameterized constructor, point(int a, int b)
, takes two integers and assigns them to the private variables, x
and y
. The displaypoint()
member function prints "(x,y)". It also has friend class, dist
.
The class dist
has only a constructor that takes two point
class objects as arguments and should display a calculated diff
variable.
However, my dist
class gives an error.
Here’s the code.
// Parameterized Constructor using Friend Class Example :-
#include <iostream>
#include <cmath>
using namespace std;
class point
{
int x, y;
friend class dist;
public:
point(int a, int b)
{
x = a;
y = b;
}
void displayPoint()
{
cout << "The Point is : (" << x << "," << y << ")" << endl;
}
};
class dist // shows error here
{
public:
void dist(point p1, point p2)
{
int x_diff = (p2.x - p1.x);
int y_diff = (p2.y - p1.y);
int diff = sqrt(pow(x_diff, 2) + pow(y_diff, 2));
cout << "The difference is : " << diff << endl;
}
};
int main()
{
point p(1, 2);
point q(4, 6);
point c(1, 1);
point d(1, 1);
point e(1, 0);
point f(70, 0);
dist(p, q);
dist(c, d);
dist(e, f);
return 0;
}
If I remove class dist and make dist() as a friend function instead of a constructor, the code works.
void dist(point p1, point p2)
{
int x_diff = (p2.x - p1.x);
int y_diff = (p2.y - p1.y);
int diff = sqrt(pow(x_diff, 2) + pow(y_diff, 2));
cout << "The difference is : " << diff << endl;
}
>Solution :
As mentioned in the comments, your primary issue is that you have declared the dist
constructor with a return type (even though that type is void
, the declaration is still a syntax error). So, just remove that return type.
Also, you shouldn’t be using the pow
function with integer types; in fact, you shouldn’t be using int
as the x_diff
and y_diff
types, nor for the resultant diff
; an integer result for that answer will, most often, be quite wrong (especially if either the x
or y
differences are small). Use double
for all those values:
class dist // shows error here
{
public:
dist(point p1, point p2) // Constructor doesn't have a return type
{
double x_diff = static_cast<double>(p2.x - p1.x);
double y_diff = static_cast<double>(p2.y - p1.y);
double diff = sqrt(pow(x_diff, 2) + pow(y_diff, 2));
cout << "The difference is : " << diff << endl;
}
};