Struct contents reference from a non-struct array object

조회 수: 46 (최근 30일)
Mukund
Mukund 2018년 8월 3일
댓글: Mukund 2018년 8월 3일
(Not matching to prev questions on google).I have struct of struct of arrays. When any struct is empty while concatenating, the above error is displayed.
d=[s1.a.d;s2.b.d;s3.c.d]
when any struct a,b,c is empty above error is shown. How to redefine stacking to eliminate the error.

채택된 답변

Guillaume
Guillaume 2018년 8월 3일
"when any struct a,b,c is empty"
If a is empty (i.e. a = []), then it is not a structure, and a.d doesn't mean anything.
What would be the result of the concatenation anyway in this case.
  댓글 수: 3
Stephen23
Stephen23 2018년 8월 3일
편집: Stephen23 2018년 8월 3일
"If a is empty (i.e. a = []), then it is not a structure, and a.d doesn't mean anything."
MATLAB clearly allows empty structures:
>> a = struct('d',{})
a =
0x0 struct array with fields:
a
>> isempty(a)
ans =
1
So the logical that something empty cannot be a structure is incorrect.
"What would be the result of the concatenation anyway in this case."
The a.d syntax always returns a comma-separated list with as many elements as a has (in this case zero):
>> a.d
>>
So the empty structure does exist, and it (correctly) returns a comma-separated list with zero things in it. I would also expect a comma-separated list from a cell array to deliver the same result:
>> C = {}
C =
{}
>> C{:}
>>
So far no surprises for me. Comma-separated lists with zero members can easily be concatenated without any error:
>> b = struct('d',2);
>> [a.d,b.d]
ans =
2
Any problems are solely due to the data type, and have nothing to do with whether the array is empty or not. Fix the data class.
Mukund
Mukund 2018년 8월 3일
Thanks Stephen, you spotted the mistake accurately.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Structures에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by