Probably a Simple Problem...

Discussion in 'Mac Programming' started by CaptainZap, Feb 10, 2007.

  1. macrumors regular

    Joined:
    Jan 17, 2007
    #1
    Well I am working my way through "Programming in Objective-C" book, and am currently stuck on an exercise in Chapter 8, unfortunately it is an even so I can't see what Kochan has on his site. So the question is,
    So in the Rectangle.h, I made the method declaration,
    Code:
    -(Point *) translate: (Point *) vector;
    and it is supposed to take a Point instance and translate it by its x and y values.

    So I came up with this method definition...
    Code:
    -(Point *) translate: (Point *) vector;
    {	
    	float vectorX, vectorY;
    		
    	origin = [[Point alloc] init];
    	
    	vectorX = [[vector origin] x] + x;
    	vectorY = [[vector origin] y] + y;
    	
    	[origin setX: vectorX setY: vectorY];
    }
    then in the main.m, I did this

    Code:
    int main (int argc, char *argv[])
    {	
    	Rectangle *myRectangle = [[Rectangle alloc] init];
    	Point *myPoint = [[Point alloc] init];
    	Point *translation = [[Point alloc] init];
    	
    	[myRectangle setHeight: 12];
    	[myRectangle setWidth: 3];
    	
    	[myPoint setX: 6 setY: 7];
    
    	[translation setX: 4 setY: 3];
    
    	[myRectangle setOrigin: myPoint];
    	
    	[myRectangle translate: translation];
    
    	printf ("Now the Origin is at (%g,%g)\n", [[myRectangle origin] x], [[myRectangle origin] y]);
    
    	return 0;
    }
    I get the errors, error: 'x' undeclared (first use in this function) and the same for y, if you need the rest of the .m and .h files, just ask.
     
  2. macrumors regular

    Joined:
    Nov 23, 2006
    #2
    It would help to know what the structs/classes of Point and Rect contained :)
     
  3. thread starter macrumors regular

    Joined:
    Jan 17, 2007
    #3
    K, for Rectangle...
    Code:
    @interface Rectangle: Object
    {
    	float height;
    	float width;
    	Point *origin;
    }
    
    -(void) setHeight: (float) h;
    -(void) setWidth: (float) w;
    -(float) height;
    -(float) width;
    -(float) area;
    -(float) perimeter;
    
    -(void) setOrigin: (Point *) pt;
    -(Point *) origin;
    
    -(Point *) translate: (Point *) vector;
    
    -(id) free;
    
    @end
    And for Point
    Code:
    @interface Point: Object
    {
    	float x;
    	float y;
    }
    
    -(void) setX: (float) xVal;
    -(void) setY: (float) yVal;
    -(void) setX: (float) xVal setY: (float) yVal;
    
    -(float) x;
    -(float) y;
    
    @end
    P.S. I left out the preprocessor lines, so don't think that I forgot to put them in my program :p
     
  4. macrumors regular

    Joined:
    Apr 7, 2004
    Location:
    Israel
    #4
    You aren't defining the 'x' and 'y' local variables you use in the translate: method anywhere...

    Edit for clarity: not the ones in the [[vector origin] x] message, the ones outside.
     
  5. thread starter macrumors regular

    Joined:
    Jan 17, 2007
    #5
    Ah, ok, I dunno why, but for some reason I kept thinking Rectangle inherited the methods from Point.

    Woot, thanks, I got it, and if anyone is curious, I just changed the translate method so it doesn't return anything and to this

    Code:
    -(void) translate: (Point *) vector;
    {	
    	float vectorX, vectorY;
    		
    	Point* transOrigin = [[Point alloc] init];
    	
    	vectorX = [vector x] + [[self origin] x];
    	vectorY = [vector y] + [[self origin] y];
    	
    	[transOrigin setX: vectorX setY: vectorY];
    	
    	[self setOrigin: transOrigin];
    	
    }
     

Share This Page