Undefined function 'isnan' for input arguments of type 'Nodes2'
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Manaal
am 2 Okt. 2022
Kommentiert: Walter Roberson
am 6 Okt. 2022
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 Kommentare
Akzeptierte Antwort
Walter Roberson
am 2 Okt. 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 Kommentar
Steven Lord
am 3 Okt. 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.
Weitere Antworten (1)
J. Alex Lee
am 5 Okt. 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 Kommentar
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!