1. ホーム
  2. string

[解決済み】動的構造体参照の引数は、有効なフィールド名で評価する必要がある

2022-02-21 18:49:58

質問

動的構造体参照への引数は有効なフィールド名で評価されなければならない」というエラーが発生します。 spectDataという構造体があり、それは次のようなものです。

spectData{1} = 

data: [256x26 double]
textdata: {1x26 cell}
colheaders: {1x26 cell}
Row: [256x1 double]
Col: [256x1 double]
Cho: [256x1 double]
Cho0x25SD: [256x1 double]
Cho0x2FCit: [256x1 double]
PCho: [256x1 double]
PCho0x25SD: [256x1 double]

これを関数呼び出しに代入してみると、次のようなコード行になります。これはmatlabがエラーだと言っているコードの行です。

 SDdata = spectData{sliceNum - firstSlice}.(MetabMapSDString);

metabString は、例えば 'PCho0x25SD' のような名前の文字列で、spectData には合計 4 つのサブ構造体があり、すべてこのように表示されます。何が間違っているのでしょうか?これはダブルなので、大丈夫だと思います。

解決方法は?

Matlabは、誤って文字列の代わりにセル配列を渡した場合、このような誤解を招くエラーメッセージを出すことがあります。 次の例は同じエラーを出します.

fields = {'foo', 'bar'}
s = struct('foo', 23, 'bar', pi)

for f = fields
  disp(f)
  s.(f) = 0
end

もしこれがあなたの問題なら(例えば、フィールド名の実際の型をテストしてください。 whos というようにするとよいでしょう。 f = char(f) .