“初始化时不兼容的类型”错误没有意义

“初始化时不兼容的类型”错误没有意义

问题描述:

我已经多年的Java程序员,但只有iPhone/Obj-c几个月。每当我觉得我对这种语言感到舒服时,就会发生一些奇怪的事情。为什么下面的代码生成“初始化时不兼容的类型”编译错误?看起来很直截了当。 '双'是一个原始的权利?!?“初始化时不兼容的类型”错误没有意义

-(void) testCalling{ 
    double myDoub = [self functionReturningDouble:3.0]; 
} 


-(double) functionReturningDouble:(double) input{ 
    return 1.0; 
} 
+1

是以前声明的第二种方法吗?否则,返回类型被假定为'id'。 – 2010-06-22 08:33:33

+0

另外,在实现('.m')文件顶部的类扩展中声明私有/内部方法是一种很好的做法。这种做法消除了对私人/内部方法的实施和使用的依赖。 (Apple Docs:http://devworld.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW2) – ohhorob 2010-06-30 04:52:27

尝试交换方法声明。它可以是范围的问题,因为乔治注意到:

-(double) functionReturningDouble:(double) input{ 
    return 1.0; 
} 

-(void) testCalling{ 
    double myDoub = [self functionReturningDouble:3.0]; 
} 

在Objective-C(这是有效的C),一种方法不“存在”,只有当它已被定义或之前声明。

+1

相反,方法签名仅在这些情况下已知:) – 2010-06-22 12:37:06

+0

谢谢!不敢相信花了这么长时间才发现这一点。 – 2010-06-22 23:45:44

+0

只是另一点..出于利益为什么顺序似乎不是一个int方法的问题,但只有双重? – 2010-06-30 05:37:46