P
Paul Davis
I've just converted from gcc2.96 to gcc3.3. One of the things that 3.3
complained about was my use of functions which had default arguments.
Previously, I put the defaults in my function definition, and then
copied the definition directly as the declaration:
void A::foo(int a, int b=0); // declare somewhere
void A::foo(int a, int b=0) {...} // define in another file
3.3 doesn't like this, because the default is repeated twice. I wanted
to keep the default in the definition, because it's better documented
there, so my first attempt was to remove the defaults from the
declarations. However, this doesn't work, because the compiler may see
calls to both A:foo(x) and A::foo(x,y), and so it needs the default in
the declaration.
So, now I've got the defaults in the declarations, but not the
definitions. This compiles but I don't particularly like it. Is this
the standard way to do this? Is it actually a requirement that the
default values should only appear in one place? Stroustrup states that
"A default argument cannot be repeated or changed in a subsequent
declaration in the same scope", but I can't find anything that
prevents the default being repeated in the definition.
Thanks
Paul
complained about was my use of functions which had default arguments.
Previously, I put the defaults in my function definition, and then
copied the definition directly as the declaration:
void A::foo(int a, int b=0); // declare somewhere
void A::foo(int a, int b=0) {...} // define in another file
3.3 doesn't like this, because the default is repeated twice. I wanted
to keep the default in the definition, because it's better documented
there, so my first attempt was to remove the defaults from the
declarations. However, this doesn't work, because the compiler may see
calls to both A:foo(x) and A::foo(x,y), and so it needs the default in
the declaration.
So, now I've got the defaults in the declarations, but not the
definitions. This compiles but I don't particularly like it. Is this
the standard way to do this? Is it actually a requirement that the
default values should only appear in one place? Stroustrup states that
"A default argument cannot be repeated or changed in a subsequent
declaration in the same scope", but I can't find anything that
prevents the default being repeated in the definition.
Thanks
Paul