Looks like no one’s replied in a while. To start the conversation again, simply ask a new question.

What am I doing wrong in this peace of code

Hi All,


I'm currently reading "Learn Objective-c on the mac" (I have finished "Learn C on the mac").

The code beneith is from the makers of the book. When I run this code in Xcode there are two problems.

Just run and you will see (I don't understand the meaning of the problem, so it's hard to explain it here).

My version of Xcode is 4.4.1









#import <Foundation/Foundation.h>


// --------------------------------------------------

// constants for the different kinds of shapes and their colors


typedef enum {

kRedColor,

kGreenColor,

kBlueColor

} ShapeColor;



// --------------------------------------------------

// Shape bounding rectangle



typedef struct {

int x, y, width, height;

} ShapeRect;



// --------------------------------------------------

// convert from the ShapeColor enum value to a human-readable name


NSString *colorName (ShapeColor color)

{

switch (color) {

case kRedColor:

return @"red";

break;

case kGreenColor:

return @"green";

break;

case kBlueColor:

return @"blue";

break;

}


return @"no clue";


} // colorName



// --------------------------------------------------

// All about Circles


@interface Circle : NSObject

{

ShapeColor fillColor;

ShapeRect bounds;

}


- (void) setFillColor: (ShapeColor) fillColor;


- (void) setBounds: (ShapeRect) bounds;


- (void) draw;


@end // Circle



@implementation Circle


- (void) setFillColor: (ShapeColor) c

{

fillColor = c;

} // setFillColor



- (void) setBounds: (ShapeRect) b

{

bounds = b;

} // setBounds



- (void) draw

{

NSLog (@"drawing a circle at (%d %d %d %d) in %@",

bounds.x, bounds.y,

bounds.width, bounds.height,

colorName(fillColor));

} // draw


@end // Circle





// --------------------------------------------------

// All about Rectangles


@interface Rectangle : NSObject

{

ShapeColor fillColor;

ShapeRect bounds;

}


- (void) setFillColor: (ShapeColor) fillColor;


- (void) setBounds: (ShapeRect) bounds;


- (void) draw;


@end // Rectangle



@implementation Rectangle


- (void) setFillColor: (ShapeColor) c

{

fillColor = c;

} // setFillColor



- (void) setBounds: (ShapeRect) b

{

bounds = b;

} // setBounds



- (void) draw

{

NSLog (@"drawing a rectangle at (%d %d %d %d) in %@",

bounds.x, bounds.y,

bounds.width, bounds.height,

colorName(fillColor));

} // draw


@end // Rectangle



// --------------------------------------------------

// All about OblateSphereoids


@interface OblateSphereoid : NSObject

{

ShapeColor fillColor;

ShapeRect bounds;

}


- (void) setFillColor: (ShapeColor) fillColor;


- (void) setBounds: (ShapeRect) bounds;


- (void) draw;


@end // OblateSphereoid



@implementation OblateSphereoid


- (void) setFillColor: (ShapeColor) c

{

fillColor = c;

} // setFillColor



- (void) setBounds: (ShapeRect) b

{

bounds = b;

} // setBounds



- (void) draw

{

NSLog (@"drawing an egg at (%d %d %d %d) in %@",

bounds.x, bounds.y,

bounds.width, bounds.height,

colorName(fillColor));

} // draw


@end // OblateSphereoid




// --------------------------------------------------

// Draw the shapes


void drawShapes (id shapes[], int count)

{

int i;


for (i = 0; i < count; i++) {

id shape = shapes[i];

[shape draw];

}


} // drawShapes




// --------------------------------------------------

// The main function. Make the shapes and draw them


int main (int argc, const char * argv[])

{

id shapes[3];


ShapeRect rect0 = { 0, 0, 10, 30 };

shapes[0] = [Circle new];

[shapes[0] setBounds: rect0];

[shapes[0] setFillColor: kRedColor];


ShapeRect rect1 = { 30, 40, 50, 60 };

shapes[1] = [Rectangle new];

[shapes[1] setBounds: rect1];

[shapes[1] setFillColor: kGreenColor];


ShapeRect rect2 = { 15, 19, 37, 29 };

shapes[2] = [OblateSphereoid new];

[shapes[2] setBounds: rect2];

[shapes[2] setFillColor: kBlueColor];


drawShapes (shapes, 3);


return (0);


} // main

Posted on Oct 14, 2012 3:14 AM

4 replies

Oct 14, 2012 7:15 AM in response to msuper69

First of all is it that hard to copy paste and then press run.


So here is the problem:


1. By the line "void drawShapes (id shapes[], int count) "

I get this error: Must explicitly describe intended ownership of an object array parameter


2. By the line "drawshapes (shapes,3); "

I get this error: Passing ' _strong id *' to parameter of type ' _unsafe_unretained id *' changes retain/release properties of pointer


Because I don't understand the meaning (this is the first time I work with ID,classes, methods and that kind of stuff) of this errors can you (or somebody else) help me.


RL6001

What am I doing wrong in this peace of code

Welcome to Apple Support Community
A forum where Apple customers help each other with their products. Get started with your Apple ID.