41
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")のような関数を使用したいですか? 私のコンパイラは正しくその仕事をしていませんか?

4

5 に答える 5

82

デフォルトパラメータの開始後に、デフォルト以外のパラメータを設定することはできません。言い換えれば、デフォルトの「hello」のbままにするための値をどのように指定しますか?word

于 2011-04-21T06:20:24.680 に答える
35

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

したがって、関数宣言を次のように変更するだけです。

void func(int b, string word = "hello")
于 2011-04-21T06:20:30.523 に答える
14

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

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

void func ( string word, int b ) {

  // some jobs

}

void func ( int b ) { func("hello", b); }
于 2011-04-21T06:24:07.147 に答える
9

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

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

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

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

void func (string word = "hello", int b = 0);
于 2011-04-21T06:22:06.500 に答える
5

何も変えずに直すことはできません!

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

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

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

void func ( int b ) {
    func( "hello", b );
}
于 2011-04-21T06:45:44.230 に答える