By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,462 Members | 3,388 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,462 IT Pros & Developers. It's quick & easy.

Prototypes for functions with default arguments

P: n/a
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
Jul 19 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
Paul Davis wrote in news:ef********************************@4ax.com:
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.
--
http://www.victim-prime.dsl.pipex.com/
Jul 19 '05 #2

P: n/a
On 10 Jul 2003 09:35:54 GMT, Rob Williscroft
<rt*@freenet.REMOVE.co.uk> wrote:
Paul Davis wrote in news:ef********************************@4ax.com:
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.


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

Paul
Jul 19 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.