开发者

gcc compile errors in an basic example objc program

Hey all, I'm new to programming and going through an objective-c book to learn the language and programing fundamentals. I've looked through the code repeatedly, went back to the book's example, and attempted to understand the gcc comple errors. Here's my code:

#import <stdio.h>
#import <objc/Object.h>

@interface Point: Object
    {
        int xaxis;
        int yaxis;
    }

    -(void) print;
    -(void) setx:   (int)x;
    -(void) sety:   (int)y;

@end

@implementation Point;

    -(void) print
        {
            printf("(%i,%i)", xaxis, yaxis);
        }

    -(void) setx:   (int) x
        {
            xaxis = x;
        }

    -(void) sety:   (int) y
        {
            yaxis = y;
        }
@end

int main (int argc, char *argv[])
    {
        Point *myPoint;

        myPoint = [Point alloc];

        myPoint = [myPoint init];

        [myPoint setx: 4];
        [myPoint sety: 5];

        printf("The coordinates are: ");
            [myPoint print];
        printf("\n");

        [myPoint free];

        return 0;

    }

Then the compile errors from gcc look like this:

urban:Desktop alex$ gcc point.m -o point -l objc
point.m: In function ‘main’:
point.m:38: warning: ‘Point’ may not respond to ‘+alloc’
point.m:38: warning: (Messages without a matching method signature
point.m:38: warning: will be assumed to return ‘id’ and accept
point.m:38: warning: ‘...’ as arguments.)
point.m:40: error: ‘mypoint’ undeclared (first use in this function)
point.m:40: error: (Each undeclared identifier is reported only once
point.m:40: error: for each function it appears in.)
point.m:49: warning: ‘Point’ may not respond to ‘-free’

Where am I going wrong?

b开发者_C百科tw I'm going through "Programming in Objective-C" by Stephen Kochan if you wanted to know.


First the base class should be NSObject, not Object

the normal way to do the initialization is to write the alloc and init in the same statement. You would typically have an -(id)init; method in your class:

-(id)init
{
  if ( ( self = [super init] ) )
  {
    ; // additional initialization goes here
  }
  return self;
}

and

int main (int argc, char *argv[])
    {
        Point *myPoint = [[Point alloc] init];

Properties are better used, then you get the setter and getter automatically generated for you

instead of

@interface Point: Object
    {
        int xaxis;
        int yaxis;
    }

write

@interface Point : NSObject
{
}

@property int xaxis;
@property int yaxis;

then when you assign you can either write

[myPoint setXaxis:4]

or

myPoint.xaxis = 4;

when you release the object write release, not free

[myPoint release];

hth


You have warnings and an error. The warnings seem to suggest that Object, which you are subclassing, doesn't implement alloc, init or free. Normally, on an Apple platform, you'd subclass NSObject, which does implement these, but without knowing which platform you're on, it's not possible to advise the correct option.

Secondly, you had a typo, but that now seems to be corrected. This

point.m:40: error: ‘mypoint’ undeclared (first use in this function)

suggests that you had mypoint in your code, rather than myPoint.


You forgot to include the header Foundation.h:

#import <Foundation/Foundation.h>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜