As mentioned by πάνταῥεῖ in a comment, it seems that you’ve a few misconceptions regarding scope of variables, about parameters and about return values. Let’s see if we can’t dispel some of those.
First of all, lets talk about scope. When we declare a variable inside a block delimited with {
and }
, the variable only exists inside that block. Code that follows the block cannot access the variable.
So, this is okay:
int a = 3;
int b = 2;
int c = a*b;
But, this is not, since the values of a and b are no longer available:
{
int a = 3;
int b = 2;
}
int c = a*b;
Next, lets talk about parameters. These are the inputs to functions which the function will use in order to complete its task. While their name is irrelevant and essentially meaningless, it will certainly help you and others of you give them meaningful names. Some programming languages and indeed, students of some disciplines don’t follow this maxim and can produce code that’s harder to follow than it need be. The implementation of Basic found in 20 year old Texas Instruments calculators and physicists, I’m looking at you!
Consider the following functions, (whose bodies I’ve ommitted for brevity):
double calcArea(double a)
{
...
}
double calcArea(double b)
{
...
}
They both suck. What’s a
stand for, how about b
?
A far better pair might resemble:
double calcArea(double radius)
{
...
}
double calcArea(double sideLenOfSquare)
{
...
}
Lastly, lets talk about return values. In each of the 4 preceding functions, the declaration begins with double
. This means that we can expect to get back a value of type double from the function. However, this is just coding – there’s no magic and as such, we need to actually let the compiler know what this value will be. Extending the two previous functions, we might come up with some something like the following:
double calcArea(double radius)
{
return 3.1415926535 * (radius * radius);
}
double calcArea(double sideLenOfSquare)
{
return sideLenOfSquare * sideLenOfSquare;
}
Now as it turns out – even these two simple functions are not all they’ve cracked-up to be. Namely, the first function uses a constant – π (Pi or 3.141….) This already exists (and with far better precision than I’ve used) in the math.h
header file. If this file is included, we then have access to the #define
d constant, M_PI
.
Next, both of these functions have the same name and take the same number of parameters of identical type. The compiler can’t possibly know which one you’d like to invoke. At a minimum, they should have different names. Perhaps something like calcCircleArea
and calcSquareArea
. Now, the compiler knows which function you’re referring to and will happily compile this part of the code. Errors may exist elsewhere, but these are a different matter.
A little research on function overloading
will provide resources that can explain the problem and solution to functions with the same name far better than I am both able and inclined to try. 🙂
1
solved How to call user defined functions in C++?