user478571
user478571

Reputation:

"default argument missing for parameter" compiler error

void func ( string word = "hello", int b ) {
    // some jobs
}

in another function

//calling 
func ( "", 10 ) ;

When I compile, it emits this error:

default argument missing for parameter

I want to use that function like func ( 10 ) or func ( "hi" ).

How can I fix it without changing anything, such as setting int b = 0?

Upvotes: 48

Views: 73571

Answers (5)

anatolyg
anatolyg

Reputation: 28241

You cannot fix it without changing anything!

To fix it, you can use overloading:

void func ( string word, int b ) {
  // some jobs
}

void func ( string word ) {
    func( word, 999 );
}

void func ( int b ) {
    func( "hello", b );
}

Upvotes: 5

Mike Seymour
Mike Seymour

Reputation: 254431

Parameters with default values have to come at the end of the list because, when calling the function, you can leave arguments off the end, but can't miss them out in the middle.

Since your arguments have different types, you can get the same effect using an overload:

void func ( string word, int b ) {

  // some jobs

}

void func ( int b ) { func("hello", b); }

Upvotes: 15

iammilind
iammilind

Reputation: 69988

The error message is proper. If the default argument is assigned to a given parameter then all subsequent parameters should have a default argument. You can fix it in 2 ways;

(1) change the order of the argument:

void func (int b, string word = "hello");

(2) Assign a default value to b:

void func (string word = "hello", int b = 0);

Upvotes: 9

Chris
Chris

Reputation: 2060

The arguments with a default value have to come in the end of the argument list.

So just change your function declaration to

void func(int b, string word = "hello")

Upvotes: 37

cnicutar
cnicutar

Reputation: 182619

You can't have non-default parameters after your default parameters begin. Put another way, how would you specify a value for b leaving word to the default of "hello" ?

Upvotes: 89

Related Questions