Objective-C的新手。获得“可能无法响应'新'警告。”构造函数导致段错误

时间:2013-04-17 15:43:34

标签: objective-c gcc constructor

所以我是Objective-C的新手,我正在关注this tutorial。我正在运行Linux Mint 14.我已经通过运行sudo apt-get install gobjc安装了gobjc并且我已经安装了gcc。我正在尝试他们的Point示例,但我遇到了一些奇怪的错误。

这是我的代码(几乎从网站上复制并粘贴):

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

@interface Point : Object
{
@private
   double x;
   double y;
}

- (id) x: (double) x_value;
- (double) x;
- (id) y: (double) y_value;
- (double) y;
- (double) magnitude;
@end

@implementation Point

- (id) x: (double) x_value
{
   x = x_value;
   return self;
}

- (double) x
{
   return x;
}

- (id) y: (double) y_value
{
   y = y_value;
   return self;
}

- (double) y
{
   return y;
}

- (double) magnitude
{
   return sqrt(x*x+y*y);
}

@end

int main(void)
{
   Point *point = [Point new];
   [point x:10.0];
   [point y:12.0];
   printf("The distance from the point (%g, %g) to the origin is %g.\n",
      [point x], [point y], [point magnitude]);

   return 0;
}

我正在使用gcc Point.m -lobjc -lm进行编译。

这是我得到的错误:

Point.m: In function ‘main’:
Point.m:52:4: warning: ‘Point’ may not respond to ‘+new’ [enabled by default]
Point.m:52:4: warning: (Messages without a matching method signature [enabled by default]
Point.m:52:4: warning: will be assumed to return ‘id’ and accept [enabled by default]
Point.m:52:4: warning: ‘...’ as arguments.) [enabled by default]

它似乎无法找到'new'方法(或者可能是alloc / init?)。

我对这个问题了不起,但我找不到多少。一切都建议切换到较新的GNUStep和NSObject,但我正在为我的一个CS课程编写一个程序,我想我必须坚持objc/Object.h

在今年年初,我们获得了一个预配置的Ubuntu映像,可以在我们可以编程的VirtualBox中使用,并且该程序可以正常工作。我不确定那里有什么能使它发挥作用。是不是Linux Mint 14不支持这个旧版本的Objective-C?

感谢任何帮助/反馈!

1 个答案:

答案 0 :(得分:5)

使用Object在Objective-C中非常陈旧(可以追溯到Next接管语言开发之前)。

现代Objective-C通过编译器支持与Foundation框架(Cocoa的非UI部分)纠缠在一起:

  • 字符串和数字文字
  • 集合(数组和词典),
  • 快速枚举(for-in循环)
  • 内存管理(ARC和自动释放池)

因此,在我个人看来,学习没有基础的Objective-C没有多大意义。

你可以包括Foundation(也可以在Linux上以某种方式提供)并使Point成为NSObject的子类。这应该让你去。