1
クラス解決{ パブリック: ボイド __dfs(ベクトル< ストリング >・パス、文字列&パス、int型の LOC、整数 nは、INT左は、int型右) { 場合(LOCの== 2 *のN){ paths.push_back(パス)。 返します。 } であれば(左< N){ __dfs(パス、パス + " ("、LOC + 1 +左、nは、1 右); //path.pop_back(); } であれば(右< 左){ __dfs(パス、パス + " )"、LOC + 1、nは、左、右+ 1 )。 // path.pop_back(); } } ベクトル < ストリング > generateParenthesis(int型N){ // 递归法来做 ベクトル< ストリング > パス; 文字列sの。 __dfs(パス、S、0、nは、0、0); 返すパスを。 } }。
编译报错:ライン11:チャー34:エラー:タイプの非const左辺値リファレンス 'のstd :: __ cxx11 ::文字列&' を結合することができない{別名 'STD :: __ cxx11 ::のbasic_string <チャー>&'}型の右辺値に'STD :: __ cxx11 ::のbasic_string <文字>'
このエラーは、意味論上のC ++コンパイラの制限があります。
非const参照パラメータが渡された場合、C ++コンパイラは、プログラマが機能で、この値を変更するだろうと信じる理由があり、かつ機能が役割への参照を返した後、これが修正されます。しかし、あなたは、一時的な変数の特殊な性質のために、渡された非const参照パラメータとして一時変数を入れた場合、プログラマは、一時的な変数や一時変数を操作していない任意の時点で解放されたので、一般的にすることができる、一時的な変数を変更ない点はありませんが、それに応じて、C ++コンパイラは一時変数は非const参照として意味上の制限に追加することはできません。