gcc在基本示例objc程序中编译错误

如何解决gcc在基本示例objc程序中编译错误

| 大家好,我是编程的新手,正在学习一本Objective-C书籍,以学习语言和编程基础知识。我反复浏览了一下代码,回到了本书的示例中,尝试理解gcc comple错误。这是我的代码:
#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;

    }
然后,来自gcc的编译错误如下所示:
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’
我要去哪里错了? 顺便说一句,如果您想知道的话,我正在学习Stephen Kochan的“用Objective-C编程”。     

解决方法

您有警告和错误。警告似乎暗示您正在子类化的
Object
没有实现
alloc
init
free
。通常,在Apple平台上,您会创建
NSObject
子类,该子类确实实现了这些
NSObject
,但是在不知道您所使用的平台上,无法建议正确的选择。 其次,您有错别字,但现在似乎已得到纠正。这个
point.m:40: error: ‘mypoint’ undeclared (first use in this function)
建议您的代码中包含
mypoint
,而不是
myPoint
。     ,首先,基类应该是NSObject,而不是Object 进行初始化的通常方法是在同一条语句中编写alloc和init。您通常会有一个-(id)init;类中的方法:
-(id)init
{
  if ( ( self = [super init] ) )
  {
    ; // additional initialization goes here
  }
  return self;
}
int main (int argc,char *argv[])
    {
        Point *myPoint = [[Point alloc] init];
更好地使用属性,则可以自动为您生成setter和getter 代替
@interface Point: Object
    {
        int xaxis;
        int yaxis;
    }
@interface Point : NSObject
{
}

@property int xaxis;
@property int yaxis;
然后当您分配时,您可以写
[myPoint setXaxis:4]
要么
myPoint.xaxis = 4;
释放对象时,写释放,不是免费的
[myPoint release];
hth     ,您忘记了包含标题Foundation.h:
#import <Foundation/Foundation.h>
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?