int alpha;
int beta;
int a;
int b;
int length;
int height;
int Long;
int High;
int hop;
double radius;
do{
a = High + 1 + h;
i = 0;
do{
b = Long + 1 + i;
alpha = pow (a,2);
beta = pow (b,2);
radius = sqrt(alpha + beta);
if ( grid[High][Long] == s && grid[a][b] == s)
{
cout << "(" << a << "," << b << "), ";
}
i = i + 1;
}while (radius <= hop);
h = h + 1;
}while (radius <= hop);
You can cast your arguments in a way that the function call is unambiguous, a way of achieving this is casting just the exponent to double ( so you will call double pow ( double base, double exponent ) ).
This can be done in your case by modifying the numeric literal: pow( a, 2.0 )
alpha = pow (a,2); the compiler does not know how to treat the parameters. Casting a to double is only part of the solution, it still needs to know what 2 is, change it to 2.0
because in the case of pow (a,2);, the compiler does not know how to treat the literal '2', it can treat it as an int or a double because there are overload for both. So you would have to cast it to int or include the .0 to remove the ambiguity.