c++ - "count" defined behind the scenes, name conflict...
- dan (13/13) Jan 23 2004 Not sure if this comes from DM, stlport, or what. I accidentally used a ...
- Scott Michel (2/17) Jan 23 2004
- dan (10/22) Jan 23 2004 //like this:
- Scott Michel (3/33) Jan 23 2004 I understand your problem, but really, can you give a short example with...
- dan (12/14) Jan 23 2004 z's type is CSerial, and it's a big class for wrapping serial port
- Scott Michel (15/35) Jan 23 2004 Actually, Dan, I don't fix compiler bugs, DigitalMars' Walter does that....
- dan (8/12) Jan 23 2004 No, look at the message again: My function expected a pointer to an uns...
- Arjan Knepper (3/21) Jan 24 2004 Are you sure you don't have "auto prototype" turned on?
- dan (1/2) Jan 24 2004 Don't even know what it is...
- Arjan Knepper (7/13) Jan 24 2004 In the IDDE you are able to set the option for (C) function prototyping,...
- dan (1/7) Jan 24 2004 I hadn't even noticed that option... No, in fact, I had set it to 'stric...
- Scott Michel (11/27) Jan 25 2004 Speaking of reading carefully, maybe you should carefully reread my mess...
- dan (13/22) Jan 25 2004 Sorry, wouldn't have thought of a misleading error message, yet I don't ...
- Scott Michel (17/31) Jan 26 2004 There are a few places in STLport where a "count" occurs, using the magi...
- dan (2/5) Jan 26 2004 Newbie here ;-)
- Scott Michel (4/12) Jan 26 2004 I don't think you want to be too hasty on that report. The count templat...
- Walter (8/10) Jan 27 2004 I have a lot of experience tracking down strange problems happening with
Not sure if this comes from DM, stlport, or what. I accidentally used a variable count, which I planned to, but forgot to declare, and got the worrisome error message below: sc main.cpp -cpp -Ae -Ar -r -mn -C -WA -S -3 -a8 -c -gf -D_DEBUG=1 -D_CONSOLE=1 -IG:\dm\stlport\stlport -IG:\dm\include -IG:\boost-1.30.2 -IG:\boost-1.30.2\boost -omain.obj Error: G:\BACNET\RS485\TEST\main.cpp(119): need explicit cast for function parameter 3 to get G:\BACNET\RS485\TEST\main.cpp(119): from: difference_typeiterator_traits<>(*C func)(_InputIter,_InputIter,const _Tp&) G:\BACNET\RS485\TEST\main.cpp(119): to : unsigned long * Lines Processed: 147315 Errors: 1 Warnings: 0 Build failed
Jan 23 2004
And the offending code looks like? dan wrote:Not sure if this comes from DM, stlport, or what. I accidentally used a variable count, which I planned to, but forgot to declare, and got the worrisome error message below: sc main.cpp -cpp -Ae -Ar -r -mn -C -WA -S -3 -a8 -c -gf -D_DEBUG=1 -D_CONSOLE=1 -IG:\dm\stlport\stlport -IG:\dm\include -IG:\boost-1.30.2 -IG:\boost-1.30.2\boost -omain.obj Error: G:\BACNET\RS485\TEST\main.cpp(119): need explicit cast for function parameter 3 to get G:\BACNET\RS485\TEST\main.cpp(119): from: difference_typeiterator_traits<>(*C func)(_InputIter,_InputIter,const _Tp&) G:\BACNET\RS485\TEST\main.cpp(119): to : unsigned long * Lines Processed: 147315 Errors: 1 Warnings: 0 Build failed
Jan 23 2004
In article <burnq9$vjj$1 digitaldaemon.com>, Scott Michel says...And the offending code looks like?//like this: #include <iostream> #include <tchar.h> #include <windows.h> #include <crtdbg.h> #include <string.h> .................... z.Read(b,10,&count); //where "count" is not defined (by me, anyhow).sc main.cpp -cpp -Ae -Ar -r -mn -C -WA -S -3 -a8 -c -gf -D_DEBUG=1 -D_CONSOLE=1 -IG:\dm\stlport\stlport -IG:\dm\include -IG:\boost-1.30.2 -IG:\boost-1.30.2\boost -omain.obj Error: G:\BACNET\RS485\TEST\main.cpp(119): need explicit cast for function parameter 3 to get G:\BACNET\RS485\TEST\main.cpp(119): from://> difference_typeiterator_traits<>(*C func)(_InputIter,_InputIter,const_Tp&) G:\BACNET\RS485\TEST\main.cpp(119): to : unsigned long * Lines Processed: 147315 Errors: 1 Warnings: 0 Build failed
Jan 23 2004
I understand your problem, but really, can you give a short example without the "...."'s? What is z's type, for example? dan wrote:In article <burnq9$vjj$1 digitaldaemon.com>, Scott Michel says...And the offending code looks like?//like this: #include <iostream> #include <tchar.h> #include <windows.h> #include <crtdbg.h> #include <string.h> .................... z.Read(b,10,&count); //where "count" is not defined (by me, anyhow).sc main.cpp -cpp -Ae -Ar -r -mn -C -WA -S -3 -a8 -c -gf -D_DEBUG=1 -D_CONSOLE=1 -IG:\dm\stlport\stlport -IG:\dm\include -IG:\boost-1.30.2 -IG:\boost-1.30.2\boost -omain.obj Error: G:\BACNET\RS485\TEST\main.cpp(119): need explicit cast for function parameter 3 to get G:\BACNET\RS485\TEST\main.cpp(119): from://> difference_typeiterator_traits<>(*C func)(_InputIter,_InputIter,const_Tp&) G:\BACNET\RS485\TEST\main.cpp(119): to : unsigned long * Lines Processed: 147315 Errors: 1 Warnings: 0 Build failed
Jan 23 2004
In article <burplb$12kr$1 digitaldaemon.com>, Scott Michel says...I understand your problem, but really, can you give a short example without the "...."'s? What is z's type, for example?z's type is CSerial, and it's a big class for wrapping serial port communication; but I really don't think the problem comes from there, as that serial library is rather oldish and doesn't make use of stl, iterators or traits. My code is using std::pair<> and std::list<>; though I'm also using boost's MPL library; but the 'count' the error message refers to looks more stl'ish than boost'ish to me; though I've been wrong before... Besides, it's not like I'm saying "z.count"... just "count". I can send you a zip with all the sources if you like, but I don't think it would help. Seems to me one of the headers must be defining count in global space, (which seems crazy to me...).
Jan 23 2004
Actually, Dan, I don't fix compiler bugs, DigitalMars' Walter does that. (*) What I was merely pointing out was that for this particular bug to get fixed, you might want to boil it down the simplest form of code possible. I was merely trying to nudge you in the right direction. It also may just be that the error message is confusing or inappropriate. There may be another template whose third param is an unsigned long; in the absense of any other information, DMC++ is assuming that the closest matching template is the one whose third param is an unsigned long. That'd be my guess. If the error message is actually confusing, then you'll still need a short example code snippet to demonstrate and propose a fix. -scooter (*) I wish I had access to the source to help with improving/fixing bugs and the IDDE. But Christmas isn't for another year. dan wrote:In article <burplb$12kr$1 digitaldaemon.com>, Scott Michel says...I understand your problem, but really, can you give a short example without the "...."'s? What is z's type, for example?z's type is CSerial, and it's a big class for wrapping serial port communication; but I really don't think the problem comes from there, as that serial library is rather oldish and doesn't make use of stl, iterators or traits. My code is using std::pair<> and std::list<>; though I'm also using boost's MPL library; but the 'count' the error message refers to looks more stl'ish than boost'ish to me; though I've been wrong before... Besides, it's not like I'm saying "z.count"... just "count". I can send you a zip with all the sources if you like, but I don't think it would help. Seems to me one of the headers must be defining count in global space, (which seems crazy to me...).
Jan 23 2004
There may be another template whose third param is an unsigned long; in the absense of any other information, DMC++ is assuming that the closest matching template is the one whose third param is an unsigned long. That'd be my guess.No, look at the message again: My function expected a pointer to an unsigned long, but I forgot to declare "unsigned long count". So, what would the compiler normally do? It would say "count not declared". *Instead*, it says that it cannot convert "count", in whatever screwey way it IS ALREADY DEFINED SOMEWHERE, to a pointer to an unsigned long. But why should there be ANYTHING named "count"?!?!... especially in global space!!! Maybe "____COUNT____", but not "count"!!! Cheers!
Jan 23 2004
dan wrote:Are you sure you don't have "auto prototype" turned on? ArjanThere may be another template whose third param is an unsigned long; in the absense of any other information, DMC++ is assuming that the closest matching template is the one whose third param is an unsigned long. That'd be my guess.No, look at the message again: My function expected a pointer to an unsigned long, but I forgot to declare "unsigned long count". So, what would the compiler normally do? It would say "count not declared". *Instead*, it says that it cannot convert "count", in whatever screwey way it IS ALREADY DEFINED SOMEWHERE, to a pointer to an unsigned long. But why should there be ANYTHING named "count"?!?!... especially in global space!!! Maybe "____COUNT____", but not "count"!!! Cheers!
Jan 24 2004
Are you sure you don't have "auto prototype" turned on?Don't even know what it is...
Jan 24 2004
dan wrote:In the IDDE you are able to set the option for (C) function prototyping, a missing prototype will be automagically added on first use/call of the function. IDDE: See project -> Setting -> Build-tab -> Prototype CMDline -p- ArjanAre you sure you don't have "auto prototype" turned on?Don't even know what it is...
Jan 24 2004
I hadn't even noticed that option... No, in fact, I had set it to 'strict'.Don't even know what it is...In the IDDE you are able to set the option for (C) function prototyping, a missing prototype will be automagically added on first use/call of the function. IDDE: See project -> Setting -> Build-tab -> Prototype CMDline -p-
Jan 24 2004
Speaking of reading carefully, maybe you should carefully reread my message. I never disagreed that the error message is misleading or inaccurrate. Unless you can track down where "count" is declared, the only other explanation is a misleading error message. Having built a compiler or two before I came back to gradual school, I know how easy it is for a compiler to generate a bad, inaccurrate, inoperative, misleading, outright incorrect error message. Proove me wrong and find where "count" is declared as a variable and buttress your assertion. -scooter dan wrote:There may be another template whose third param is an unsigned long; in the absense of any other information, DMC++ is assuming that the closest matching template is the one whose third param is an unsigned long. That'd be my guess.No, look at the message again: My function expected a pointer to an unsigned long, but I forgot to declare "unsigned long count". So, what would the compiler normally do? It would say "count not declared". *Instead*, it says that it cannot convert "count", in whatever screwey way it IS ALREADY DEFINED SOMEWHERE, to a pointer to an unsigned long. But why should there be ANYTHING named "count"?!?!... especially in global space!!! Maybe "____COUNT____", but not "count"!!! Cheers!
Jan 25 2004
In article <bv1aoo$j4j$1 digitaldaemon.com>, Scott Michel says...Speaking of reading carefully, maybe you should carefully reread my message. I never disagreed that the error message is misleading or inaccurrate. Unless you can track down where "count" is declared, the only other explanation is a misleading error message.Sorry, wouldn't have thought of a misleading error message, yet I don't see where were you suggesting that in your message; but maybe I'm misreading it. You mentioned a template foulup leading to expecting a pointer to a long; but what I was trying to say is that my function already expects a pointer to a long, so there's no need to find *why* a ptr to long would be needed. It's supposed to be needed. It's not that I passed a pointer to long by accident, but rather that I was passing a pointer to a long called "count" which I never declared. Anyways, I changed the name to "coun", and declared it, and everything's running smoothly. But I thought I'd report the fact that someone or something is apparently declaring something called "count".Having built a compiler or two before I came back to gradual school, I know how easy it is for a compiler to generate a bad, inaccurrate, inoperative, misleading, outright incorrect error message. Proove me wrong and find where "count" is declared as a variable and buttress your assertion.Hmm, wouldn't know where to start, and I'm really behind schedule with my project. I guess I'll prove you wrong in a week or two... ;-)
Jan 25 2004
dan wrote:Sorry, wouldn't have thought of a misleading error message, yet I don't see where were you suggesting that in your message; but maybe I'm misreading it. You mentioned a template foulup leading to expecting a pointer to a long; but what I was trying to say is that my function already expects a pointer to a long, so there's no need to find *why* a ptr to long would be needed. It's supposed to be needed. It's not that I passed a pointer to long by accident, but rather that I was passing a pointer to a long called "count" which I never declared. Anyways, I changed the name to "coun", and declared it, and everything's running smoothly. But I thought I'd report the fact that someone or something is apparently declaring something called "count".There are a few places in STLport where a "count" occurs, using the magic of Cygwin utilities and "grep -n -r count stlport | grep -v _count": stl/_algo.h, line 125 stl/_algobase.h, line 524 stl/_fstream.h, line 113 stl/_hashtable.h, line 501 stl/_hash_map.h, lines 191, 380 stl/_hash_set.h, lines 191, 388 You're not seeing a misleading error message. It's the compiler trying to match up a template function named "count" that counts the number of elements between two iterators, first and list, that match a particular value. You might want to go off an have a word with the HP and SGI STL folks, as well as the STLport folks for having a template function named "count". Finding this wasn't that hard. :-) -scooter
Jan 26 2004
You might want to go off an have a word with the HP and SGI STL folks, as well as the STLport folks for having a template function named "count".I'll report it to stlport; thanks!Finding this wasn't that hard. :-)Newbie here ;-)
Jan 26 2004
dan wrote:I don't think you want to be too hasty on that report. The count template function is actually a feature. :-) :-) :-) -scooterYou might want to go off an have a word with the HP and SGI STL folks, as well as the STLport folks for having a template function named "count".I'll report it to stlport; thanks!Finding this wasn't that hard. :-)Newbie here ;-)
Jan 26 2004
"Scott Michel" <scottm cs.ucla.edu> wrote in message news:bv4qs9$9cu$1 digitaldaemon.com...I don't think you want to be too hasty on that report. The count template function is actually a feature. :-) :-) :-)I have a lot of experience tracking down strange problems happening with vast, over complicated, excessively interrelated, layered huge masses of source code. It just never works to guess at what is going on. The only thing to do is to follow the advice at www.digitalmars.com/faq.html#error and www.digitalmars.com/bugs.html There really isn't any other way that works.
Jan 27 2004