Undefined function 'isnan' for input arguments of type 'Nodes2'
2 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
Walter Roberson
on 2 Oct 2022
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 Comment
Steven Lord
on 3 Oct 2022
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.
More Answers (1)
J. Alex Lee
on 5 Oct 2022
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 Comment
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!