2017-02-23 6 views
-2

imは現在再帰を迂回しており、参照パラメータを変更して関数内で異なる値を与えることができるかどうか疑問に思っていました。これは私の問題です。それはコンパイルされません。参照パラメータと再帰?

bool findnum_recur (int wanted, int & num) 
{ 
    // if i want to increment num and call the function recursively 

    /*like this : */ 

    findnum_recur (wanted, num+1); 

    // its giving me error, why and is there an alternative way 
} 
+2

'num + 1'は左辺参照ではありません。' ++ num'を試してください。そして、警告されると、 'num' ** **が修正されます。 – WhozCraig

+0

@ NathanOliver私は 'num ++を意味しました。 findnum_recur(want、num); '。 P – user463035818

答えて

0

参照パラメータは、あなたが知っている、変数を参照することがあります。 は、ここでの例です。 num+1はエラーメッセージのソースである変数ではありません。

再帰関数の参照パラメータを使用すると完全に問題ありません。あなたが達成しようとしていたことを何らかのヒントにしたなら、ここであなたを助けることができるかもしれません。

+0

ありがとう、私の問題はプログラムではありませんでしたが、問題を理解するだけで、なぜ私はその特定のエラーがあったのか知りたかったのですが、もしあれば参照パラメータで行うこと –

2
findnum_recur(wanted, ++num); 

値の参照は、+が返す値にバインドすることはできません。

+0

@user:著者にあまりにも多くのクレジットを与えると思います。 –

+0

@ScottHunter num ++は依然としてrvalueなので、私のコメントは削除されました。私の脳は恥ずかしい方法で私を下ろします。 – user

3

この場合はありません。 num+1は右値であり、非constオブジェクトへの参照は右値にバインドされません。

変更への再帰呼び出し:

int new_num=num+1; 
findnum_recur (wanted, new_num); 

と、これは罰金になります。再帰呼び出しでの参照に関して特に特別な、または不思議なことは何もありません。基準パラメータは、その点で他のパラメータと異なることはありません。

また、あなたはに再帰関数を変更することができます。

bool findnum_recur (int wanted, const int & num) 

、これは右辺値パラメータにバインドします。

+0

ありがとう!右辺値と左辺値に慣れていなかったので、先生のせいだと思う。ありがとう! –

関連する問題