6

所以我是 Objective-C 的新手,我正在关注本教程。我正在运行 Linux Mint 14。我已经通过运行安装了 gobjc,sudo apt-get install 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]

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

我已经查找了很多关于这个问题的信息,但我找不到太多。一切都建议切换到较新的 GNUStep 和NSObject,但我正在为我的一个 CS 课程编写程序,我认为我必须坚持使用objc/Object.h.

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

任何帮助/反馈表示赞赏!

4

1 回答 1

5

在 Objective-C 中使用Object是相当古老的(可以追溯到 Next 接管语言的开发之前)。

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

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

因此,在我个人看来,在没有 Foundation 的情况下学习 Objective-C 没有多大意义。

您可以包含 Foundation(也可以在 Linux 上以某种方式获得)并使 Point 成为NSObject. 那应该让你继续前进。

于 2013-04-17T15:50:56.803 回答