Prototypes for functions with default arguments

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
 
R

Rob Williscroft

Paul Davis wrote in
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?

Yes, Its the only way.
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.

A definition is (also) a declaration, so you're out of luck.

HTH

Rob.
 
P

Paul Davis

Paul Davis wrote in

Yes, Its the only way.


A definition is (also) a declaration, so you're out of luck.

HTH

Rob.

Thanks Rob - I've changed everything so the defaults are now in the
declarations.

Paul
 

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

No members online now.

Forum statistics

Threads
474,431
Messages
2,571,677
Members
48,796
Latest member
Greg L.

Latest Threads

Top