parse error before 'return'

Diskuter dine og andres prosjekter. Alt fra Widgets til programmer.

parse error before 'return'

Innleggav ArneØ » søn 26.08.2007 0:42

Sitter her å tar mine første steg inn i Cocoa og objective-c, og holder på med noen tutorial rund omkring på nettet. Ved flere annledninger møter jeg på parse error before 'return', eller ...before 'else'.
Har søkt litt på google og ser at dette ikke er en uvanlig rookie feil å gjøre, men jeg klarer ikke helt å finne svar på hva som er feil når denne error'en oppstår? hva er f.eks feil i koden under som gjør at jeg får parse error before return? (tilfellet under er en screensaver tut. fra cocaDevCentral)

Kode: Merk alt
- (void)animateOneFrame
{
   NSBezierPath *path;
   NSRect rect;
   NSSize size;
   NSColor *color;
   float red, green, blue, alpha;
   int shapeType;
   
   size = [self bounds].size;
// Calculate random width and height
  rect.size = NSMakeSize( SSRandomFloatBetween( size.width / 100.0,
                                                size.width / 10.0 ),
                          SSRandomFloatBetween( size.height / 100.0,
                                                size.height / 10.0 ));
                                    
// Calculate random origin point
  rect.origin = SSRandomPointForSizeWithinRect( rect.size, [self bounds] );

// Decide what kind of shape to draw
  shapeType = SSRandomIntBetween( 0, 2 );
 
  switch (shapeType)
  {
   case 0: // rect
      path = [NSBezierPath bezierPathWithRect:rect];
      break;
      
   case 1: // oval
      path = [NSBezierPath bezierPathWithOvalInRect:rect];
      break;
   
   case 2: // arc
   default:
   
   {
     float startAngle, endAngle, radius;
     NSPoint point;
    
     startAngle = SSRandomFloatBetween( 0.0, 360.0 );
     endAngle = SSRandomBetween( startAngle, 360.0 + startAngle );
// Use the smallest value for the radius (either width or height)
  radius =   rect.size.width <= rect.size.height ?
         rect.size.width / 2 : rect.size.height / 2;

// Calculate our center point
  point = NSMakePoint(   rect.origin.x + rect.size.width / 2,
                  rect.origin.y + rect.size.height / 2 );

// Construct the path
  path = [NSBezierPath bezierPath];
 
  [path appendBezierPathWithArcWithCenter   : point
                        radius      : radius
                        startAngle   : startAngle
                        endAngle   : endAngle
                        clockwise   : SSRandomIntBetween( 0, 1 )];
   }
   break;
  }
// Calculate a random color
  red = SSRandomFloatBetween( 0.0, 255.0 ) / 255.0;
  green = SSRandomFloatBetween( 0.0, 255.0 ) / 255.0;
  blue = SSRandomFloatBetween( 0.0, 255.0 ) / 255.0;
  alpha = SSRandomFloatBetween( 0.0, 255.0 ) / 255.0;
 
  color = [NSColor colorWithCalibratedRed:red
                           green:green
                            blue:blue
                           alpha:alpha];

 [color set];

// And finally draw it
  if (SSRandomIntBetween( 0, 1 ) == 0)
    [path fill];
  else
    [path stroke];
}
   return
}



Det er den helt nederste <i>return</i> som får feilmeldingen

takk!

Brukerens avatar
medlem i 211 måneder
 

Innleggav ArneArts » søn 26.08.2007 0:52

Hm, har du ikke en } for mye? Jeg telte tre { og fire }.

Brukerens avatar
medlem i 240 måneder
 

Innleggav ArneØ » søn 26.08.2007 1:12

Ja ser det selv nå, men finner ikke ut hvor den resterende { skal være, gjør du? har gått gjennom tutorialen en gang til og koden ser ut til å stemme med det som står der.
Og hva betur <i>parse error before....</i> egentlig?

Brukerens avatar
medlem i 211 måneder
 

Innleggav EinarJ » søn 26.08.2007 5:40

Det betyr at kompilatoren fant en feil FØR det angitte tegnet.

En god taktikk for å finne feil med { er, rykk inn èn tab-bredde (4 space/1 tab) for hver {, og tilbake tilsvarende for hver }.

Moderator
Brukerens avatar
medlem i 235 måneder
 

Innleggav ArneArts » søn 26.08.2007 13:00

Ser ut som om den }-en som er før return bare kan fjernes. Mynd you, jeg har bare skummet over koden. :-P

Brukerens avatar
medlem i 240 måneder
 

Innleggav EinarJ » søn 26.08.2007 15:09

Jeg kopierte alt inn i XCode, markerte alt, valgte re-indent selection, og fant at arnearts hadde rett.

http://rafb.net/p/oX7mK374.html

Moderator
Brukerens avatar
medlem i 235 måneder
 

Innleggav ArneArts » søn 26.08.2007 15:12

/me pwns.

Og jeg som aldri har skrevet en linje i obj. C :-P

Brukerens avatar
medlem i 240 måneder
 

Innleggav ArneØ » søn 26.08.2007 19:49

takker!

Brukerens avatar
medlem i 211 måneder
 


Returner til Utvikling på Mac



Hvem er i Forumene

Registrerte brukere: Ingen registrerte brukere