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

2 ビュー (過去 30 日間)
Josef
Josef 2013 年 11 月 30 日
回答済み: per isakson 2013 年 12 月 9 日
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?? :)

回答 (1 件)

per isakson
per isakson 2013 年 12 月 9 日
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

カテゴリ

Help Center および File ExchangeSwitches and Breakers についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by