В 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 предупредит вас о
warning: incomplete implementation of class ‘Complex’
warning: method definition for ‘-setReal::’ not found
Кстати, если вам просто нужно комплексное значение, но не нужно, чтобы он был классом Objective-C, существует C99 complex , например,
#include <complex.h>
...
double complex z = 5 + 6I;
double complex w = -4 + 2I;
z = z + w;
printf("%g + %gi\n", creal(z), cimag(z));