468,512 Members | 1,402 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,512 developers. It's quick & easy.

Avoid implicit cast from enum to double

Flo

I have the problem, that the following Code produces neither warning
nor error at compile time, at least not with the Microsoft Visual C++
6.0 compiler (warning level 4)

enum E { eOne, eTwo };
struct S {
void fooDouble( double ) {};
void fooEnum( E ) {};
};
int main() {
S s;
s.fooDouble( eOne ); // neither warning nor error
return 0;
}

As you can see, accidentally an enum is passed to the method expecting
an double. In my real program, this leads to an error at run-time,
since fooDouble only accepts quit small values, i.e. values smaller
than 1.0. Has anybody an idea what I can do, maybe changes in the
methodnames/parameterlist, to provoke a warning at compile time so one
can not accidentally pass an enum to the method expecting a double?

Flo

Flo

Jul 18 '06 #1
2 3858
Flo wrote:
I have the problem, that the following Code produces neither warning
nor error at compile time, at least not with the Microsoft Visual C++
6.0 compiler (warning level 4)

enum E { eOne, eTwo };
struct S {
void fooDouble( double ) {};
void fooEnum( E ) {};
Please drop the habit of appending a semicolon after a function body.
It just looks sloppy.
};
int main() {
S s;
s.fooDouble( eOne ); // neither warning nor error
return 0;
}

As you can see, accidentally an enum is passed to the method expecting
an double. In my real program, this leads to an error at run-time,
since fooDouble only accepts quit small values, i.e. values smaller
than 1.0. Has anybody an idea what I can do, maybe changes in the
methodnames/parameterlist, to provoke a warning at compile time so one
can not accidentally pass an enum to the method expecting a double?
Wrap your enum in a struct and pass the struct. Inside just access the
wrapped value.

Check the value (or assert if you can debug all cases of using your
function) inside your 'fooDouble' function.

Be careful and just don't write code that passes the enum to 'fooDouble'.

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Jul 18 '06 #2
Flo wrote:
I have the problem, that the following Code produces neither warning
nor error at compile time, at least not with the Microsoft Visual C++
6.0 compiler (warning level 4)

enum E { eOne, eTwo };
struct S {
void fooDouble( double ) {};
void fooEnum( E ) {};
};
int main() {
S s;
s.fooDouble( eOne ); // neither warning nor error
return 0;
}
Well, it can be converted implicitly.
As you can see, accidentally an enum is passed to the method expecting
an double. In my real program, this leads to an error at run-time,
since fooDouble only accepts quit small values, i.e. values smaller
than 1.0. Has anybody an idea what I can do, maybe changes in the
methodnames/parameterlist, to provoke a warning at compile time so one
can not accidentally pass an enum to the method expecting a double?
Remove the type prefix from the function name and call your functions both
just foo. Then the compiler will automatically choose the right function.

Jul 18 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

15 posts views Thread by buda | last post: by
1 post views Thread by Martin Bischoff | last post: by
11 posts views Thread by Steve Gough | last post: by
1 post views Thread by Joe HM | last post: by
1 post views Thread by not_a_commie | last post: by
1 post views Thread by perroe | last post: by
17 posts views Thread by arnuld | last post: by
reply views Thread by NPC403 | last post: by
1 post views Thread by fmendoza | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.