7

Win8-64で0.8を使ってRustを学んでいます。パラメータの入力を処理する関数がそれらのパラメータを含む構造体を返したところに取り組んでいるテストプログラムがあります。それはうまくいきました。次に、関数に &struct を渡すようにプログラムを変更しましたが、不変フィールドに代入しようとしているというコンパイラ エラーが発生しました。

このエラーを防ぐには、構造体へのポインター/参照をどのように渡す必要がありますか?

エラーが発生するコード(いくつかのバリエーションを試しました):

let mut ocParams : cParams = cParams::new();     //!!!!!! This is the struct passed

fInputParams(&ocParams);               // !!!!!!! this is passing the struct

if !ocParams.tContinue {
    return;
}

.......

struct cParams {
  iInsertMax : i64,
  iUpdateMax : i64,
  iDeleteMax : i64,
  iInstanceMax : i64,
  tFirstInstance : bool,
  tCreateTables : bool,
  tContinue : bool
}

impl cParams {
  fn new() -> cParams {
     cParams {iInsertMax : -1, iUpdateMax : -1, iDeleteMax : -1, iInstanceMax : -1,
              tFirstInstance : false, tCreateTables : false, tContinue : false}
  }   
}

.....

fn fInputParams(mut ocParams : &cParams) {

    ocParams.tContinue = (sInput == ~"y");    // !!!!!! this is one of the error lines

関数内の構造体フィールドへの割り当てはすべて、コンパイル時にエラーになります。compile から生じるエラーの例:

testli007.rs:240:2: 240:20 error: cannot assign to immutable field
testli007.rs:240   ocParams.tContinue = (sInput == ~"y");   
4

1 に答える 1