Objective c 不完整的实现(xcode错误?)

Objective c 不完整的实现(xcode错误?),objective-c,xcode,Objective C,Xcode,//9.1.h #import <Foundation/Foundation.h> @interface Complex : NSObject { double real; double imaginary; } @property double real, imaginary; -(void) print; -(void) setReal: (double) andImaginary: (double) b; -(Complex *) add: (Com

//9.1.h

#import <Foundation/Foundation.h>


@interface Complex : NSObject 
{

    double real;
    double imaginary;

}

@property double real, imaginary;
-(void) print;
-(void) setReal: (double) andImaginary: (double) b;
-(Complex *) add: (Complex *) f;

@end
在最后一行
@end
中,Xcode告诉我实现不完整。代码仍能按预期工作,但我是新手,担心自己遗漏了什么。据我所知,它是完整的。有时我觉得Xcode会保留过去的错误,但也许我只是失去了理智

谢谢!
-Andrew

9.1.h
中,您错过了一个“a”

-(void) setReal: (double) andImaginary: (double) b;
//                       ^ here

代码仍然有效,因为在Objective-C中,选择器的部分可以没有名称,例如

-(id)initWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y
//                                    ^           ^           ^
这些方法称为

return [self initWithControlPoints:0.0f :0.0f :1.0f :1.0f];
//                                      ^     ^     ^
选择器名称自然是
@selector(initWithControlPoints::)

因此,编译器会将您的声明解释为

-(void)setReal:(double)andImaginary
              :(double)b;
由于您尚未提供此
-setReal::
方法的实现,gcc将警告您

警告:类“Complex”的实现不完整
警告:找不到'-setReal::'的方法定义

顺便说一句,如果您只需要一个复杂的值,但不需要它成为Objective-C类,那么有,例如

#包括
...
双复z=5+6I;
双络合物w=-4+2I;
z=z+w;
printf(“%g+%gi\n”,creal(z),cimag(z));

可能是因为实数参数在界面中没有名称
-(void)setReal:(double)和magical:(double)bKenny已经回答了这个问题,但我只是想指出,从方法(如-add)返回自动释放的对象是一种惯例:还有一条注释,对于这样的值类型,最好将它们设置为不可变,即,在构造函数中设置实部和虚部,并且不提供任何方法来更改它们。一旦创建了复杂的实例,您是否特别需要修改它?
-(void)setReal:(double)andImaginary
              :(double)b;
#include <complex.h>

...

double complex z = 5 + 6I;
double complex w = -4 + 2I;
z = z + w;
printf("%g + %gi\n", creal(z), cimag(z));