I'm writing a program at the moment and I have to finish it
real soon. The problem I'm having is illustrated in the
following:
class Blah
{
private:
int k;
public:
operator int()
{
return k;
}
};
int main()
{
Blah const poo;
switch (poo)
{
case 1:
;
}
}
The yokie that goes in a switch statement has to be an
integral type. My class has an "operator int()". Grand.
Note that the "poo" object is const. If I make the poo
object non-const, then the above code compiles. BUT WHAT
THE HELL DIFFERENCE DOES IT MAKE IF IT'S CONST!
Some enlightenment please,
-JKop
> operator const int()
That was my first thought.
The bleeding thing still doesn't work!
The words "compiler bug" are coming to mind...
Anyway,
the operator int() returns by *value*, so it would make no
difference whatsoever if the object was const or not.
The only reason I can see of being able to define both:
operator int()
and
operator const int()
is to have separate routines that work differently on const
objects Vs normal objects.
I could have the program written five times already if I
didn't have to deal with this bullshit.
Right now, I'm getting around it via:
Blah temp(poo);
switch (temp)
That's until I figure out what the hell's going on!
-JKop
-JKop
// Means it doesn't modify k
operator int() const
// Also a default constructor is needed
> {
> return k;
> }
>
> };
>
>
> int main()
> {
> Blah const poo;
>
> switch (poo)
> {
> case 1:
> ;
> }
>
> }
>
>
> The yokie that goes in a switch statement has to be an
> integral type. My class has an "operator int()". Grand.
>
> Note that the "poo" object is const. If I make the poo
> object non-const, then the above code compiles. BUT WHAT
> THE HELL DIFFERENCE DOES IT MAKE IF IT'S CONST!
>
> Some enlightenment please,
>
> -JKop
--
Ioannis Vranos
The problem is trivial and the posting excessive: stop trolling.
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
> operator int() const
This is me shaking your virtual hand:
*shakes virtual hand*
Hallileujah (or however you spell it!)
Thanks a lot Ioannis.
-JKop
> * JKop:
>>
>> [swear words]
>
> The problem is trivial and the posting excessive: stop
trolling.
>
Subjective, asshole.
-JKop
Here's the results from Comeau C++ (hint hint) which hopefully helps:
G:\tmp>como --A --vc71 cct.cpp
Comeau C/C++ 4.3.4.1 (May 29 2004 23:08:11) for MS_WINDOWS_x86
Copyright 1988-2004 Comeau Computing. All rights reserved.
MODE:strict errors C++
"cct.cpp", line 20: error: const variable "poo" requires an initializer --
class "Blah" has no explicitly declared default constructor
Blah const poo;
^
"cct.cpp", line 22: error: expression must have integral or enum type
switch (poo)
^
"cct.cpp", line 22: warning: variable "poo" is used before its value is set
switch (poo)
^
2 errors detected in the compilation of "cct.cpp".
--
Greg Comeau / Comeau C++ 4.3.3, for C++03 core language support
Comeau C/C++ ONLINE ==> http://www.comeaucomputing.com/tryitout
World Class Compilers: Breathtaking C++, Amazing C99, Fabulous C90.
Comeau C/C++ with Dinkumware's Libraries... Have you tried it?
This guy refuses to pay for software on principle, so you'll
be lucky..
> "cct.cpp", line 22: error: expression must have integral or enum type
> switch (poo)
> ^
Interestingly, g++'s error message is:
error: passing `const Blah' as `this' argument of
`Blah::operator int()' discards qualifiers
ie. it seems that g++ selected 'operator int' and then noted that
you can't call a non-const function for a const object (which
was the OP's problem). Your compiler seems to have not selected
this function at all for that reason (so IMHO in this
particular case, g++'s error message was more informative).
Comments?
I'd be confused because it's telling me something about
a function it should not have picked.
What G++ version is that?! Look at my original post, I got
a totally different, non-informative error.
-JKop
A little question: Do you use 3.4?
Kind regards,
Nicolas
--
| Nicolas Pavlidis | Elvis Presly: |\ |__ |
| Student of SE & KM | "Into the goto" | \|__| |
| pav...@sbox.tugraz.at | ICQ #320057056 | |
|-------------------University of Technology, Graz----------------|
>> What G++ version is that?! Look at my original post, I got a totally
>> different, non-informative error.
>
> A little question: Do you use 3.4?
>
> Kind regards,
> Nicolas
Okay could you do me a favour please?
Hold my hand and slowly guide me through the process of downloading the
latest version of G++.
I remember the last time I downloaded G++, it was one of the most traumatic
experiences of my life... to this day I still wake up in a cold sweat
thinking of those abbreviations. Cryptic is not the word.
Thanks,
-JKop
What GCC are you using, what version and in what OS?
In Windows you may use the latest Beta of Dev-C++ at
http://www.bloodshed.net.
I hate bugs, I mean, I hate Dev C++. They've almost become
synonyms for me. When I hear "bugs", I think "Dev C++".
When I think "Dev C++", I think "bugs".
Anyway, I've got the latest version of MS Visual Studio on
its way to me... :-D
A BETA version of Dev C++, is that for the 3rd World?
-JKop
> A BETA version of Dev C++, is that for the 3rd World?
You may download the latest version of GCC for Windows:
http://prdownloads.sf.net/mingw/MinGW-3.1.0-1.exe?download
and use it from command line or use Context:
> JKop wrote:
>
>> A BETA version of Dev C++, is that for the 3rd World?
>
>
> You may download the latest version of GCC for Windows:
>
>
> http://prdownloads.sf.net/mingw/MinGW-3.1.0-1.exe?
download
>
Beautiful!
> and use it from command line or use Context:
>
> http://www.context.cx/
Have been for a while!
-JKop
You never posted any error messages. This is g++ (note: lower-case
g) 3.4.1. I got it from http://gcc.gnu.org/ . If you want a
Windows binary then you should install Cygwin (www.cygwin.com)
or Mingw.