MATLAB Answers

How can I get rid of this enumeration error while using classes?

28 views (last 30 days)
Oluwaseun on 10 Dec 2013
Commented: Zangdaarr on 20 Jan 2016
Here's an example of what I am trying to do:
classdef Colors
R = 0;
G = O;
B = 0;
function c = Colors(r , g, b)
c.R = r; c.G = g; c.B = b;
Red (1, 0, 0)
Orange (1,.5, 0)
Yellow (1, 1, 0)
Green (0, 1, 0)
Blue (0, 0, 1)
Indigo (.2,0,.8)
Violet (1, 0, 1)
>> c = Colors.Red
??? Error using ==> Colors
Attempt to define enumeration without Enumeration class attribute in class 'Colors'.

Answers (1)

Brad Stiritz
Brad Stiritz on 4 Jul 2014
MATLAB enumeration definitions can't be nested within another classdef definition, as your code attempts to do. That would be very convenient & useful, but unfortunately isn't supported currently.
You need to define your enumeration as its own class in its own @-folder. Also, note that since you've supplied your own enumeration values, your class needs to inherit support for those values. However, your numeric vector values aren't specified properly; they need to be within brackets. Here's how your classdef would need to look.. (I'm only showing the first few rows)
classdef MyColors < double
Red ([1, 0, 0])
Orange ([1,.5, 0])
Yellow ([1, 1, 0])
Unfortunately, when we try to use this, we find that vector values aren't allowed :(
>> MyColors.Red
In class 'MyColors', enumeration member named 'Red' must be scalar.
So you'll have to find a different way to implement your idea. I would suggest considering an ordinary classdef with constant properties, a la :
classdef MyColors
properties (Constant)
Red = [1, 0, 0];
Orange = [1,.5, 0];
Yellow = [1, 1, 0];
Now we get our desired results:
>> MyColors.Red
ans =
1 0 0
  1 Comment
Zangdaarr on 20 Jan 2016
Matlab really has its own way to copy OOL which challenge all logic and common sense.

Sign in to comment.


Community Treasure Hunt

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

Start Hunting!