所以我是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?
感谢任何帮助/反馈!
答案 0 :(得分:5)
使用Object
在Objective-C中非常陈旧(可以追溯到Next接管语言开发之前)。
现代Objective-C通过编译器支持与Foundation框架(Cocoa的非UI部分)纠缠在一起:
因此,在我个人看来,学习没有基础的Objective-C没有多大意义。
你可以包括Foundation(也可以在Linux上以某种方式提供)并使Point成为NSObject
的子类。这应该让你去。