Неполная реализация (ошибка xcode?) - PullRequest
5 голосов
/ 18 мая 2011

// 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

#import "9.1.h"


@implementation Complex

@synthesize real, imaginary;

-(void) print
{
    NSLog(@ "%g + %gi ", real, imaginary);
}

-(void) setReal: (double) a andImaginary: (double) b
{
    real = a;
    imaginary = b;
}

-(Complex *) add: (Complex *) f
{
    Complex *result = [[Complex alloc] init];

    [result setReal: real + [f real] andImaginary: imaginary + [f imaginary]];

    return result;

}
@end

В последней строке @end Xcode сообщает, что реализация не завершена. Код все еще работает, как и ожидалось, но я новичок в этом и беспокоюсь, что что-то пропустил. Это полно, насколько я могу сказать. Иногда я чувствую, что XCode цепляется за прошлые ошибки, но, возможно, я просто схожу с ума!

Спасибо! -Эндрю

1 Ответ

10 голосов
/ 18 мая 2011

В 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...