web-dev-qa-db-ja.com

デフォルト引数がありません-コンパイラエラー

void func ( string Word = "hello", int b ) {

  // some jobs

}

in another function

 //calling 
 func ( "", 10 ) ;

コンパイルすると、コンパイラはエラーを出力します。

default argument missing for parameter 

方法「int b = 0」を作成しないなど、何も変更せずに修正できますか?さらに、func(10)やfunc( "hi")のような関数を使用したいのですが? 私のコンパイラは仕事をしていないのですか?

33
user478571

デフォルト以外のパラメーターを指定することはできませんafterデフォルトのパラメーターが始まります。言い換えると、bの値をどのように指定して、Wordをデフォルトの「hello」のままにしますか?

68
cnicutar

デフォルト値を持つ引数は、引数リストの最後に来る必要があります。

したがって、関数宣言を

void func(int b, string Word = "hello")
31
Chris

デフォルト値のパラメーターはリストの最後に配置する必要があります。これは、関数を呼び出すときに引数を末尾から外すことはできますが、途中で見逃すことはできないためです。

引数には異なる型があるため、オーバーロードを使用して同じ効果を得ることができます。

void func ( string Word, int b ) {

  // some jobs

}

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

エラーメッセージは適切です。デフォルト引数が特定のパラメータに割り当てられている場合、後続のすべてのパラメータにはデフォルト引数が必要です。 2つの方法で修正できます。

(1)引数の順序を変更します。

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

(2)bにデフォルト値を割り当てます:

void func (string Word = "hello", int b = 0);
8
iammilind

何も変更せずに修正することはできません!

修正するには、オーバーロードを使用できます。

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

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

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