0

さて、関数があるとしましょう

void fun(const MyStructure& argu1 = MyStructure(), MyStructure& argu2 = Mystructure())

argu2関数の値を変更したいので、constではありません。

関数を呼び出すには:

MyStructure a; 
MyStructure b; 
fun(a,b);

ビルドはWindowsでは成功しますが、Linuxでは失敗し、エラーは

default argument for parameter of type 'MyStructure&' has type 'MyStructure'

しかし、非constである2番目のデフォルト引数を削除すると、WindowsとLinuxの両方でビルドが成功します...誰かがそれを解決する理由と方法を教えてもらえますか?

4

1 に答える 1

1

オーバーロードを使用して、オプションの2番目の非定数参照引数を手動で処理できます。

void fun( MyStruct const& arg1, MyStruct& arg2)
{
    // do the real work
}

void fun( MyStruct const& arg1 = MyStruct())
{
    MyStruct arg2;  // a dummy argument that can be changed, but we'll
                    //  throw those changes away
    fun( arg1, arg2);
}
于 2012-10-27T04:18:31.143 に答える