Проблема с возвратом CGPoint

Я получил этот метод:

-(CGPoint) getPointOnaLine: (CGPoint) p1: (CGPoint) p2: (int) dt {
    CGPoint tempPoint;
    float myY = p1.y;
    float len = getLineLength( p1, p2 );
    float res = 1000;
    // do not bother with calculation with small widths
    if ( dt == 0 )
        return p1;
    if ( len < (2 / res ) ) 
        return p2;
    float increm = len / res;
    //  int min = 2;

    float dY = p2.y - p1.y;
    float dx = p2.x - p1.x;

    if ( dx != 0 ) {          // slope is infinite
        float slope = dY / dx;

        float b = p1.y - slope * p1.x;

        if ( p1.x < p2.x ) {
            for ( float i= p1.x; i<=p2.x; i=i+increm ) {
                myY = (slope * i + b);
                tempPoint = ccp(i,myY);
                len = getLineLength( p1,  tempPoint);
                if ( len >= dt)
                    return tempPoint;
            }
        } else if ( p1.x > p2.x )
            for ( float i= p2.x; i<=p1.x; i=i+increm) {
                myY = (slope * i + b);
                tempPoint = ccp(i,myY);
                len = getLineLength( p2, tempPoint);
                if ( len >= dt )
                    return tempPoint;
            }
    } else {
        return p2;
    }
    return p1;
}

Я использую его в другом методе:

CGPoint b1, b2, pt;
b1 = getPointOnaLine(originalPoint, bezierPoint, (int)t*stepLine1);
b2 = getPointOnaLine(bezierPoint, targetPoint, (int)t*stepLine2);
bLen = getLineLength(b1,b2);
stepLine3 = bLen / frames;
pt =  getPointOnaLine(b1,b2,(int)self.tCGPoint b1, b2, pt;

Компилятор продолжает говорить мне «Несовместимые типы при назначении», где я объявляю b1, b2 и pt. Интерфейс:

-(CGPoint) getPointOnaLine: (CGPoint) p1: (CGPoint) pt2: (int) dt;

Если я удаляю задание, оно просто дает мне предупреждение о неявном объявлении. Я действительно смущен тем, почему это не скомпилируется.

Крис


person user3457079    schedule 28.05.2012    source источник


Ответы (2)


Вы определили метод (хотя и со странно безымянными параметрами), но вызываете его как функцию.

Пытаться:

b1 = [self getPointOnaLine:originalPoint :bezierPoint :(int)t*stepLine1];

(Еще лучше объявить его с именами параметров, чтобы упростить чтение для вас в будущем.)

person Phillip Mills    schedule 28.05.2012

Вы вызываете сообщения Objective-C в стиле c-функции, вместо этого используйте его как

b1 = [self getPointOnaLine:originalPoint :bezierPoint  :(int)t*stepLine1];
b2 = [self getPointOnaLine:bezierPoint :targetPoint :(int)t*stepLine2];

если b1 и b2 инициализированы в одном и том же классе, в противном случае self должен быть заменен объектом, для которого определен метод getPointOnaLine:bezierPoint.

person A-Live    schedule 28.05.2012
comment
Спасибо, парни. Я знал, что это что-то простое. Я парень JAVA. - person user3457079; 28.05.2012
comment
О, тогда вам понравится синтаксис :) - person A-Live; 28.05.2012