Undefined function 'graf' for input arguments of type 'double'.

1 view (last 30 days)
Hi everyone, I've got a problem. I'm making OOP, but can't finish it, there is somewhere an mistake :/
classdef muzeum2
%MUZEUM2 je OOP vytvořená z @muzeum
properties (GetAccess=private)
den
osm
devet
deset
jedenact
dvanact
trinact
ctrnact
patnact
sestnact
end
methods
function navstevnost = muzeum2( varargin )
%MUZEUM je konstruktor tridy "muzeum"
% Objektově orientovaná funkce.
% Vstupem jsou kladná celá čísla, přičemž první vstup představuje den v
% týdnu, kdy byla návštěvnost zaznamenána. Dalšími vstupy je návštěvnost
% v otvírací době (8-17 hodin)
%
% Příklad: navsteva=muzeum(3,11,14,10,5,3,17,10,22,15)
%
% Made by Josef Komžík, 28.11.2013
% joskakomza@gmail.com
% Ošetření vstupů
%---------------------------------------------------------------------------
if nargin~=10
error('Zadali jste špatný počet vstupů, správný počet je 10 vstupů')
end
for i=1:nargin
vstup=varargin{1};
if ~isnumeric(vstup)
error('Zadávejte jen čísla')
end
if (vstup-floor(vstup))~=0 || vstup<0
error('Nesprávně zadané vstupy, všechny musí být kladná celá čísla')
end
end
if varargin{1}>7 || varargin{1}==0
error('Špatný den!! 1..7')
end
%---------------------------------------------------------------------------
i=varargin{1};
switch i
case 1
navstevnost.den='pondělí';
case 2
navstevnost.den='úterý';
case 3
navstevnost.den='středu';
case 4
navstevnost.den='čtvrtek';
case 5
navstevnost.den='pátek';
case 6
navstevnost.den='sobotu';
case 7
navstevnost.den='neděli';
end
for i=2:nargin;
vstup=varargin{i};
switch(i)
case 2
navstevnost.osm=vstup;
case 3
navstevnost.devet=vstup;
case 4
navstevnost.deset=vstup;
case 5
navstevnost.jedenact=vstup;
case 6
navstevnost.dvanact=vstup;
case 7
navstevnost.trinact=vstup;
case 8
navstevnost.ctrnact=vstup;
case 9
navstevnost.patnact=vstup;
case 10
navstevnost.sestnact=vstup;
end
end
doba=8:(7+nargin-1);
navsteva=[varargin{2:nargin}];
graf(doba,navsteva) %volani privatni metody kresleni grafu
end
function display( navstevnost )
%DISPLAY je funkce, která vypisuje návštěvnost v naměřeném dni
disp([inputname(1) '=']);
disp(['Průměrná návštěvnost muzea v: ' num2str(navstevnost.den)]);
disp(['Během 8.-9. hodiny ' sloveso(navstevnost.osm) ' ' num2str(navstevnost.osm) ' ' lide(navstevnost.osm)]);
disp(['Během 9.-10. hodiny ' sloveso(navstevnost.devet) ' ' num2str(navstevnost.devet) ' ' lide(navstevnost.devet)]);
disp(['Během 10.-11. hodiny ' sloveso(navstevnost.deset) ' ' num2str(navstevnost.deset) ' ' lide(navstevnost.deset)]);
disp(['Během 11.-12. hodiny ' sloveso(navstevnost.jedenact) ' ' num2str(navstevnost.jedenact) ' ' lide(navstevnost.jedenact)]);
disp(['Během 12.-13. hodiny ' sloveso(navstevnost.dvanact) ' ' num2str(navstevnost.dvanact) ' ' lide(navstevnost.dvanact)]);
disp(['Během 13.-14. hodiny ' sloveso(navstevnost.trinact) ' ' num2str(navstevnost.trinact) ' ' lide(navstevnost.trinact)]);
disp(['Během 14.-15. hodiny ' sloveso(navstevnost.ctrnact) ' ' num2str(navstevnost.ctrnact) ' ' lide(navstevnost.ctrnact)]);
disp(['Během 15.-16. hodiny ' sloveso(navstevnost.patnact) ' ' num2str(navstevnost.patnact) ' ' lide(navstevnost.patnact)]);
disp(['Během 16.-17. hodiny ' sloveso(navstevnost.sestnact) ' ' num2str(navstevnost.sestnact) ' ' lide(navstevnost.sestnact)]);
end
function c = plus(a,b)
%přetíženy operátor PLUS průměruje návštěvnost ve vybranych dnech
% Funkce je volána a+b
if ~isa(a,'muzeum') % a NENI muzeum!
error('Prvni vstup musi byt objekt "muzeum"!')
end
if ~isa(b,'muzeum') % b NENI muzeum!
error('Druhy vstup musi byt objekt "muzeum"!')
end
c.den = [a.den,' a ', b.den];
c.osm = mean([a.osm,b.osm]);
c.devet = mean([a.devet,b.devet]);
c.deset = mean([a.deset,b.deset]);
c.jedenact = mean([a.jedenact,b.jedenact]);
c.dvanact = mean([a.dvanact,b.dvanact]);
c.trinact = mean([a.trinact,b.trinact]);
c.ctrnact = mean([a.ctrnact,b.ctrnact]);
c.patnact = mean([a.patnact,b.patnact]);
c.sestnact = mean([a.sestnact,b.sestnact]);
c = class(c,'muzeum'); % a znova mame objekt
end
end
methods(Access=private)
function graf(x,y)
%funkce, která nakreslí graf objektu
hold on
plot(x,y,'b-.');
plot(x,y,'bo')
plot(7:.1:17,0,'k')
title('Graf naměřené návštěvnosti');
xlabel('Hodina');
ylabel('Počet lidí');
axis([7 17 min(y)-2 max(y)+2]);
end
function s = lide(pocet)
if pocet==2 || pocet==3 || pocet==4
s = 'lidé';
elseif pocet==1
s = 'člověk';
else % ostatní čísla
s = 'lidí';
end
end
function s = sloveso(pocet)
if pocet==2 || pocet==3 || pocet==4
s = 'přišli';
elseif pocet==1
s = 'přišel';
else % ostatní čísla
s = 'přišlo';
end
end
end
end
If I try to call a function with perhaps
>>cas=muzeum2(7,1,1,2,2,3,3,4,3,2)
it always shows me this error: Undefined function 'graf' for input arguments of type 'double'.
And I don't know why :/ Could someone help me?? :)

Answers (1)

per isakson
per isakson on 9 Dec 2013
Two lines need to be changed to make the constructor work:
Change the line
graf(doba,navsteva) %volani privatni metody kresleni grafu
to
navstevnost.graf(doba,navsteva) %volani privatni metody kresleni grafu
and the line
function graf(x,y)
to
function graf( obj, x,y) %#ok<INUSL>
Think of graf as a method rather than a function.
There are several similar mistakes in your code. See http://www.mathworks.com/help/matlab/object-oriented-programming.html

Community Treasure Hunt

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

Start Hunting!