Undefined function 'graf' for input arguments of type 'double'.
    3 views (last 30 days)
  
       Show older comments
    
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?? :)
0 Comments
Answers (1)
  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
0 Comments
See Also
Categories
				Find more on Instrument Control Toolbox Supported Hardware 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!
