LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   obsolete binding?? (https://www.linuxquestions.org/questions/programming-9/obsolete-binding-370428/)

lmvent 10-06-2005 04:19 PM

obsolete binding??
 
Here is my code:




#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

int main(void)
{ int atHome = 0;
int stepsToTry = 5000;
double x = 0;
double y = 0;
double dx = 0;
double dy = 0;
double angle;
const double PI = 4*atan(1.0);
cout << "Will Waldo make it home?\n\n";
cout << "Input an int to start the random number generator: ";
int myStart;
cin >> myStart;
srand(myStart);
for (int i = 0; i < stepsToTry; i = i + 1)
{ rand();
do
{ double angle = 2*PI*rand()/RAND_MAX;
dx = cos(angle);
dy = sin(angle);
}while (atHome = 0);
do
{ y = y + dy;
}while (y >= -10 && y <= 10);
do
{ x = x + dx;
}while (x >= -10 && x <= 10);
if (x>=8 && x<=10)
{ if(y >= 8 && y <= 10)
{ atHome = 1;
}
}
}
if (atHome)
{ cout << "Waldo made it home after taking " << i << "steps!\n";
}
else
{ cout << "Waldo is still lost after taking" << stepsToTry << "steps\n\n";
cout << "Please play again and try to get Waldo home!\n";
}
return 0;
}


Here is my error:



waldo.cpp: In function 'int main()':
waldo.cpp:41: name lookup of 'i' changed for new ISO 'for' scoping
waldo.cpp:21: using obsolete binding at 'i'


What the hell does that mean?

Dark_Helmet 10-06-2005 05:03 PM

When posting code, please, please, please use code tags around it. If you don't know what the code tags are, there is a button labeled "Code" above the message reply/new thread text box. Click it and it will insert the tags for you.

Your problem lies with scoping. The only place your code declares the variable is inside a for-loop:
Code:

for (int i = 0; i < stepsToTry; i = i + 1)
You later reference it outside the for loop with:
Code:

cout << "Waldo made it home after taking " << i << "steps!\n";
When declaring a variable like this, it only exists inside the for-loop. Some compilers accepted sloppy programming by letting the variable get referenced outside its scope. The warning you get from g++ says that the ISO standard now explicitly disallows use outside the for loop. The compiler will continue compiling the code by assuming the sloppy method should be used.

Either declare the variable outside the for loop, or reference a different variable in the cout statement to avoid the message.

Also, you have a mistake in one of your do-while loops:
Code:

do
{
  double angle = 2*PI*rand()/RAND_MAX;
  dx = cos(angle);
  dy = sin(angle);
}while (atHome = 0);

The text in red is an assignment not a comparison. That expression will always assign 0 to atHome and the expression will always evaluate to false.

frogn8r 12-02-2010 07:15 PM

obsolete binding??
 
I was just faced with this weird anomaly also. Turns out I was accidentally adding the semicolon to the end of my for loop statement.
e.g.
Code:


 for (int count = 0; count <= sumNum; ++count);

It's the newbie mistake of the semicolon at the end that threw me off.
I'm sure this would effect all types of loops, including (but not limited too) While loops, Do loops, and maybe even if-else statement.

Hope this helps.


All times are GMT -5. The time now is 11:59 AM.