The scope of a variable is always the block it is inside. For example if you do something like
if(…)
{
int y = 5; //y is created
} //y leaves scope, since the block ends.
else
{
int y = 8; //y is created
} //y leaves scope, since the block ends.
cout << y << endl; //Gives error since y is not defined. The solution is to define y outside of the if blocks int y; //y is created if(...) { y = 5; } else { y = 8; } cout << y << endl; //Ok In your program you have to move the definition of y and c out of the if blocks into the higher scope. Your Function then would look like this: //Using the Gaussian algorithm int dayofweek(int date, int month, int year ) { int y, c; int d=date; if (month==1||month==2) { y=((year-1)%100); c=(year-1)/100; } else { y=year%100; c=year/100; } int m=(month+9)%12+1; int product=(d+(2.6*m-0.2)+y+y/4+c/4-2*c); return product%7; } Here's a simplified example based on of your problem: if (test) {//begin scope 1 int y = 1; }//end scope 1 else {//begin scope 2 int y = 2;//error, y is not in scope }//end scope 2 int x = y;//error, y is not in scope In the above version you have a variable called y that is confined to scope 1, and another different variable called y that is confined to scope 2. You then try to refer to a variable named y after the end of the if, and not such variable y can be seen because no such variable exists in that scope. You solve the problem by placing y in the outermost scope which contains all references to it: int y; if (test) { y = 1; } else { y = 2; } int x = y; I've written the example with simplified made up code to make it clearer for you to understand the issue. You should now be able to apply the principle to your code.