0

エラーが発生します:
エラー: タイプ 'std::string& {aka std::basic_string&}' の非 const 参照の初期化が無効です タイプ 'std::basic_string' の右辺値から

コードは次のとおりです。

 const std::string& hitVarNameConst = (isKO ? "isKO" : "isKI");
 for (int i = 0; i < numAssets; i++){
      std::string& hitVarName1 = hitVarNameConst + Format::toString(i + 1);
      //use hitVarname1 with some other function
      }

このエラーを削除するにはどうすればよいですか? 以前に次のコードを試していましたが、まだ同じエラーがスローされていました。

    for (int i = 0; i < numAssets; i++){
        std::string& hitVarName1 = (isKO ? "isKO" : "isKI") + Format::toString(i + 1);
         //use hitVarname1 with some other function        
         }
4

3 に答える 3

1

毎回ループ内で新しい文字列を作成しているため、それへの参照を作成することは、アドレスがないため (割り当てられるまで) 参照できない r 値への参照を作成しようとしていることを意味します。

&割り当ての宣言型から を削除すると、機能するか、 に変更const std::string&されます。コンパイラは、定数である限り、一時変数を参照として割り当てることができることが多いためです。

于 2016-03-10T16:56:39.177 に答える
1

これらの文字列のいずれも参照であってはなりません。それらはオブジェクトであり、純粋でシンプルです。&2 つの s を削除します。

于 2016-03-10T17:34:04.320 に答える
0

あなたが何かを持っているときhitVarNameConst + Format::toString(i + 1)、それから一時的なオブジェクトを取得します。C++ の用語での一時オブジェクトは右辺値と呼ばれます(右辺値は歴史的な用語であり、通常、右辺値は代入演算子の右側にあるという事実を指します (のようにa = get_b())。左側には、右辺値。

非 const 参照は右辺値にバインドできません。const 参照 (一時の寿命を延ばす良い効果があります) を持つか、一時の新しいインスタンスを作成してstd::stringそこにコピーすることができます。コピー省略と移動セマンティクスを併用すると、実際のコピーが行われないことが保証されます。

于 2016-03-10T16:59:42.783 に答える