BEFORE I EXPLODE

J

JKop

G++ gives the most un-informative, cryptic, BULLSHIT errors
statements.

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
 
I

Ioannis Vranos

JKop said:
G++ gives the most un-informative, cryptic, BULLSHIT errors
statements.

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,


operator const int()
 
J

JKop

Ioannis Vranos posted:
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
 
I

Ioannis Vranos

JKop said:
G++ gives the most un-informative, cryptic, BULLSHIT errors
statements.

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()


// Means it doesn't modify k
operator int() const


// Also a default constructor is needed
 
J

JKop

Ioannis Vranos posted:
operator int() const


This is me shaking your virtual hand:

*shakes virtual hand*

Hallileujah (or however you spell it!)


Thanks a lot Ioannis.


-JKop
 
G

Greg Comeau

G++ gives the most un-informative, cryptic, BULLSHIT errors
statements.

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,

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".
 
O

Old Wolf

Here's the results from Comeau C++ (hint hint) which hopefully helps:

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::eek:perator 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?
 
G

Greg Comeau

This guy refuses to pay for software on principle, so you'll
be lucky..

Interestingly, g++'s error message is:
error: passing `const Blah' as `this' argument of
`Blah::eek:perator 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.
 
J

JKop

Interestingly, g++'s error message is:
error: passing `const Blah' as `this' argument of
`Blah::eek:perator int()' discards qualifiers


What G++ version is that?! Look at my original post, I got
a totally different, non-informative error.

-JKop
 
N

Nicolas Pavlidis

JKop said:
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
 
J

JKop

Nicolas Pavlidis posted:
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
 
I

Ioannis Vranos

JKop said:
Nicolas Pavlidis posted:





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.


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.
 
J

JKop

Ioannis Vranos posted:
not the word.


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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,014
Latest member
BiancaFix3

Latest Threads

Top