From: Rodeo Red Newsgroups: comp.os.msdos.djgpp Subject: Re: "for" messages Date: Mon, 22 Nov 1999 22:56:30 -0500 Organization: Church of Evangelical Environmental Extremism Lines: 77 Message-ID: <055AF6C058B39CA5.AE73F39F516148F5.649AD2B8ADF2213B@lp.airnews.net> X-Orig-Message-ID: <383A106C DOT C957E74D AT netstep DOT net> References: <3839D8B8 DOT F0E10FB AT efd DOT lth DOT se> <31D677D3D5976EA1 DOT 2282C56AE95402D6 DOT 16BA81A6C65620CB AT lp DOT airnews DOT net> <3839FE04 DOT 9F9FEDF8 AT a DOT crl DOT com> Abuse-Reports-To: support at netstep.net to report improper postings NNTP-Proxy-Relay: library1.airnews.net NNTP-Posting-Time: Mon Nov 22 21:54:57 1999 NNTP-Posting-Host: !b?L"-@[06`4cRN (Encoded at Airnews!) Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Mailer: Mozilla 4.7 [en] (Win98; I) X-Accept-Language: en To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Weiqi Gao wrote: > The code in your file used to be legal C++ code, but the final ANSI C++ > standard made it illegal. > By "illegal" you mean the program won't compile ? Then these are error messages and not just warnings ? (How does one ultimately tell ?) > > The thing to note here is that the scope of a variable declared in the > head of a loop is the rest of the head and inside of the braces: > > for (/* declare variable here */; /* use it here */ ; /* use it here > */) { > /* use it here */ > } > /* can't use it here */ according to what your saying I should add braces to lines 20 and 26- {} for example change: line 19 for (i = 0; i < 5; i++) line 20 cout << "num[" << i <<"] == " << num[i] << '\n'; to line 19 for (i = 0; i < 5; i++) line 20 { cout << "num[" << i <<"] == " << num[i] << '\n'; } { /* Then I'm using it here */ } So I tried that and I got the same messages: testfile.cpp: In function `int main(...)': testfile.cpp:25: name lookup of `i' changed for new ANSI `for' scoping testfile.cpp:19: using obsolete binding at `i' Line 25 is: for (i = 0; i < 5; i++) Line 19 is: for (int i = 0; i < 5; i++) which is not suprizing because I added braces to lines 26 and 20, but the errors are in lines 25 and 19. > > > Your second for() loop is trying to use the 'i' declared in the head > of the first for() loop, which by the time you reached the second for() > loop has gone out of scope already. > I thought that shouldnt matter because the i is also declared in the second loop. > > The error messages you received from the compiler is an attempt by the > gcc authors to help users who know the old rule (which says you CAN use > the variable). Had they been less considerate, you would have received > this error message: > > testfile.cpp:25: 'i' undeclared (first use in this function) OK so they ARE error messages. That makes sense but I still don't understand what the fix is. Thanks for that clarification anyway. Onward through the fog ! Red -- "Space travel is utter bilge!" -Sir Richard Van Der Riet Wolley