'What does it mean that "a declaration shadows a parameter"?

I am trying to make a function that returns double the integer number that I will pass to it. I am getting the following error message with my code:

declaration of 'int x' shadows a parameter int x; "

Here is my code:

#include <iostream>
int doublenumber();
using namespace std;
int doublenumber(int x)// <-- this is the function which returns double the value .
{
    int x;
    return 2 * x;
    cout << endl;
}
int main()
{
    int a;
    cout << "Enter the number that you want to double it : " << endl;
    cin >> a;
    doublenumber(a);

    return 0;
}


Solution 1:[1]

You have x as a parameter and then try to declare it also as a local variable, which is what the complaint about "shadowing" refers to.

Solution 2:[2]

I did it because your advice was so helpful, and this is the final result :

#include <iostream>
using namespace std;

int doublenumber(int x)
{
    return 2*x;
}

int main()
{
    int a;
    cout << "Enter the number that you want to double it : " << endl;
    cin>>a;
    int n= doublenumber(a);
    cout << "the double value is : " << n << endl;
    return 0;
}

Solution 3:[3]

#include <iostream>
using namespace std;
int doublenumber(int x)
{
return 2*x;
}
int main()
{
int a;
cout << "Enter the number that you want to double it : " << endl;
cin>>a;
int d = doublenumber(a);

cout << "Double : " << d << endl;

return 0;
}

There are some problem with your code. Your declaration and definition of function dies not match. So remove declaration as no necessity of it.

You are declaring local x variable inside function which will shadow your function arguments.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Scott Hunter
Solution 2 RamblingMad
Solution 3