对Objective-C来说是个新概念。获得“a”;可能不响应';新';警告&引用;导致segfault的构造函数

对Objective-C来说是个新概念。获得“a”;可能不响应';新';警告&引用;导致segfault的构造函数,objective-c,gcc,constructor,Objective C,Gcc,Constructor,所以我对Objective-C还不熟悉,我也在关注。我正在运行LinuxMint14。我已经通过运行sudo apt get install gobjc安装了gobjc,并且已经安装了gcc。我正在尝试他们的点示例,但我遇到了一些奇怪的错误 这是我的代码(基本上是从网站上复制粘贴的): 它似乎无法找到“新”方法(或者可能是alloc/init?) 关于这个问题,我查了很多资料,但没找到多少。一切都建议切换到较新的GNUStep和NSObject,但我正在为我的一个CS类编写程序,我想我必须坚持使

所以我对Objective-C还不熟悉,我也在关注。我正在运行LinuxMint14。我已经通过运行
sudo apt get install gobjc
安装了gobjc,并且已经安装了gcc。我正在尝试他们的
示例,但我遇到了一些奇怪的错误

这是我的代码(基本上是从网站上复制粘贴的):

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

关于这个问题,我查了很多资料,但没找到多少。一切都建议切换到较新的GNUStep和
NSObject
,但我正在为我的一个CS类编写程序,我想我必须坚持使用
objc/Object.h

今年年初,我们得到了一个预先配置好的Ubuntu映像,可以在VirtualBox中使用,我们可以在上面编程,这个程序在上面运行得很好。我不确定是什么让它起作用。可能是LinuxMint14不支持Objective-C的旧版本吗


感谢您的帮助/反馈

使用
Object
在Objective-C中相当陈旧(可以追溯到下一步接管语言开发之前)

现代Objy-C通过编译支持与基础框架(可可的非UI部分)纠缠在一起:

  • 字符串和数字文本
  • 集合(数组和字典)
  • 快速枚举(用于in循环)
  • 内存管理(ARC和自动释放池)
因此,在我的个人观点看来,没有基金会的学习Objul-C没有多大意义。
可以包括基础(在Linux上也可用),并使点成为“代码> NSbObjs<代码>的子类。这应该会让你开始学习。

+1通过非苹果平台上的传统命令行程序学习Objective-C!很好地消除了Objective-C的这一方面。您是否尝试过
[[Point alloc]init]
而不是
[Point new]
?据我所知,
new
总是在LLVM中工作,但GCC可能不是这种情况,它与编译器无关。请注意,obj-c类没有构造函数。他们有一个初始值设定项。区别是微妙的,但非常重要。是的,但这不是问题所在。在这里,基类库(或者叫dyoucallit)才是区别所在。基金会与LIBOBJC(<代码>对象< /代码>是LIBOBJC的一部分)。谢谢您的响应!我读了一大堆书后发现这个物体也很旧。但问题是对于我的类,我必须使用
Object
而不是
NSObject
。我安装的
gobjc
包似乎没有默认构造函数。我想知道我是否忘记添加一些东西,或者没有安装某种软件包?如上所述,它在Ubuntu图像上运行良好,并且没有安装GNUSTOP和基础。知道问题出在哪里吗?马上使用NSObject,告诉任何人你的运行时没有实现+new、+alloc、-init。不要因为有人叫你做而做傻事。只要做对了,告诉他们你为什么要这样做。我认为这就是教育的意义所在。@Monolo还有其他类似于ObjFW的对象框架的基础。你可以说这是某种基础,嗯,只是FIY。
#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;
}
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]