2012-07-12 2 views
4

"이 구조체 참조 인수는 유효한 필드 이름으로 평가되어야합니다."라는 오류가 나타납니다. 나는 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에 오류가 있다고 말한 코드 라인입니다. metabString 예를 들어 이름 중 하나의 문자열

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

'는 PCho0x25SD'spectData는 I 표시 이와 같은 모든 총 4 개의 서브 구조체를 갖는다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?? 그것은 두 배로 그래서 나는 괜찮을 것이라고 생각했다.

+0

'MetabMapSDString'은 항상 유효한 필드 이름을 포함합니까? 오타가 있는지 확인 했습니까? –

+0

내가 택시를 확인한 후에 오타가 없음을 확인합니다. 웬일인지 이제는 오류가 발생하지 않습니다. –

+0

오류가 일치하지 않는 것 같습니다. 나는 다시 일어날 수없는 것 같아요. 나는 변화를 전혀하지 않았습니다. –

답변

11

실수로 문자열 대신 셀 배열을 전달하면 Matlab에서이 오류 메시지가 표시 될 수 있습니다. 다음의 예는 같은 오류가 있습니다 :이 문제 (예를 들어 whos하여 필드 이름의 실제 타입을 테스트) 인 경우

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

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

를, 그것은 f = char(f) 말을하는 데 도움이됩니다.

+0

'f = f {:}'또는'f = f {1}'도 작동합니다. 어느 쪽이든 특별한 이점이 있는지 확실하지 않습니다. +1 – zelanix

+0

@zelanix'char'의 장점은'char (f (1))'은 할 수 있지만'f (1) {1}'은 할 수 없다는 것입니다. – Bernhard

2

문자열은 셀로 matlab에 표현됩니다. 리터럴 문자열은 char 배열 유형입니다. 그들은 다르게 인쇄합니다.

ans = 
abc 

이제 두 내장 함수의 차이에 관해서 같은 일반 문자 배열을 인쇄하면서

ans = 

    'abc' 

같은 셀 스트링 지문 : char가 셀 스트링으로 변환하면서 cellstr 문자열을 문자 배열 변환 char 배열.

귀하의 경우에는 동적 구조 참조로 char(MetabMapSDString)을 사용해야합니다.

관련 문제