Undefined function 'isnan' for input arguments of type 'Nodes2'
2 ビュー (過去 30 日間)
古いコメントを表示
I have created a class Nodes that creates a node with properties value, next, and previous. Next and previous are set to nan and Nodes 2 takes in an item which is the value.
I have created a seperate handle class that uses Nodes2, it has an obj.head that is set to nan as its property. I have attached some troubleshooting I have below to confirm my filepath is correct.
I am trying to run
if (~isnan(obj.head))
which is where the error occurs and where the code stops.
I am not sure what to do and how to move forward.
Thanks for any ideas!
0 件のコメント
採用された回答
Walter Roberson
2022 年 10 月 2 日
if I understand correctly, obj.head is either a class member or else NaN for the case where the queue is empty.
In the case where obj.head is indeed NaN because the queue is empty then isnan applied to it would be fine because isnan applied to a number is fine.
But consider the case where the queue is not empty so that the head is a class object. Then isnan is applied to the class object and that fails because the class does not define an isnan method.
Is there a particular reason you are representing empty-queue as nan and not as [] or an empty object of the class?
1 件のコメント
Steven Lord
2022 年 10 月 3 日
You could also define an isnan method for the class that checks if the value property of the object is NaN. You could implement the nan function for your class and use nan('Nodes') to make a "placeholder" object to use as your head and tail nodes.
その他の回答 (1 件)
J. Alex Lee
2022 年 10 月 5 日
For reference, a related question that shows more of the actual classes in question: https://www.mathworks.com/matlabcentral/answers/1817710-inserted-value-failing-to-show-up-in-list?s_tid=mlc_ans_men_view&mentions=true#comment_2398560
classdef DLL < handle
properties
head; % head node of the DLL
end
methods
function obj = DLL()
obj.head = Nodes2.empty();
end
end
end
And in Nodes2
classdef Nodes2
properties
value % the value that will be stored in our DLL
previous % pointer to previous node
next % pointer to next node
end
methods
end
function obj = Nodes2(item)
obj.value = item;
obj.next = Nodes2.empty;
obj.previous = Nodes2.empty;
end
end
So you can test with the vanilla "isempty"?
1 件のコメント
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!