“与整数转换不兼容的指针”

时间:2012-08-09 21:57:19

标签: objective-c

我是Objective-C编程领域的完整的“noob”,我遇到了各种各样的绊脚石。我前几天得到了Stephen G. Kochan的“Objective-C编程,第4版”,并且一直在练习练习,其中包括创建Fraction类。好吧,我是我,我决定通过添加加法,减法,乘法和除法的方法来看看是否可以通过本教程的范围进行一些“高级”修补。并且,我遇到了我不知道该怎么做的事情......(1)用(和不带)参数调用类方法,(2)将它们的返回值分配给与返回相同类型的变量。引用的方法应该返回整数(int)类型的数字,但由于某种原因,我在两个赋值语句中得到错误:“不兼容的指向整数转换的指针...等”。我一直在墙上撞了一个小时。我究竟做错了什么?这是相关方法的代码:

-(void) add: frac1:(Fraction *) f1: (Fraction *) f2 
{ 
   int n1 = [Fraction: getNumerator()];
   int d1 = [Fraction: getDenominator()];
   // rest of method not yet written
}

- Andy H。

3 个答案:

答案 0 :(得分:1)

int n1 = [Fraction getNumerator];
int d1 = [Fraction getDenominator];

不需要分号或括号。

方法如下:

[ClassName methodName:paramater nextParam:param2];

依此类推参数名称......

另外:您的方法声明也是错误的:

-(void) addfrac1:(Fraction *) f1 withF2:(Fraction *) f2 

摆脱add:f1:

答案 1 :(得分:1)

我将试图冒险冒险的愤怒并间接回答这个问题。

首先 - 在类中实现添加的常用方法是提供一种向自身添加内容的方法。因此,不要提供一个添加两个分数的方法 - 尝试提供一个方法,将一个分数添加到自身并将结果作为新的分数对象返回。

其次 - 在方法名称中使用get通常用于表示间接返回对象和值的方法 - 如Cocoa Coding guidelines

中所述

你最好只使用@properties作为分子和分母而不是编写自己的访问器。

所以,IMO - 你的方法可能是:

- (Fraction *)addFraction:(NSFraction *)fraction {
    NSInteger numerator = self.numerator + fraction.numerator;
    NSInteger denominator = self.denominator + fraction.denominator;

    return [[NSFraction alloc] initWithNumerator:numerator andDenominator:denominator];
}

当然,假设您拥有相关属性和初始化程序。

答案 2 :(得分:0)

您误解了如何声明Objective-C方法。你输入了这个:

-(void) add: frac1:(Fraction *) f1: (Fraction *) f2

这是编译器如何解释它。它看到add:::的选择器(方法名称),带有三个参数。第一个参数名为frac1。第二个参数名为f1。第三个参数名为f2。由于您没有为frac1参数提供类型,因此编译器假定类型为id(可以引用任何对象)。所以就像你打字一样:

- (void)add:(id)frac1 :(Fraction *)f1 :(Fraction *)f2

您可以这样调用该方法:

id something;
Fraction *fraction1;
Fraction *fraction2;
[myCalculator add:something :fraction1 :fraction2];

但那可能不是你想要的。

我认为您要做的就是声明您的方法:

- (void)addFraction:(Fraction *)f1 toFraction:(Fraction *)f2;

然后你可以这样称呼它:

Fraction *fraction1;
Fraction *fraction2;
[myCalculator addFraction:fraction1 toFraction:fraction2];

如果Fraction是一个Objective-C类,那么在你的addFraction:toFraction:方法中,你需要发送你的参数消息来得到它们的分子和分母,如下所示:

int n1 = [f1 numerator];
int d1 = [f1 denominator];