Проблема вызова методов класса (Q: 1) - PullRequest
1 голос
/ 18 февраля 2011

Я пытаюсь преобразовать старую программу на C, содержащую некоторые статические методы, в Obj-c, но у меня возникли некоторые проблемы с ее компиляцией. В заголовочном файле я получил:

@interface Anneal : NSObject
...
...
+(float)approxInitT;
-(costType)simulatedAnnealing;
...

и в файле реализации два проблемных метода (также сокращены для краткости):

@implementation Anneal

+(float)approxInitT
{
    float T=0.0;
    int m2=0;

    ...

    if(m2==0)
        T = T_LIFESAVER;
    else
        T = T / m2 / log(initProb);
    return T;
}

-(costType)simulatedAnnealing
{
    float T;

    ...

    if(Tset)
        T=initialT;
    else
        T=[self approxInitT]; // error:incompatible types in assignment
}

К сожалению, я получаю сообщение об ошибке "несовместимые типы в присваивании", хотя 'T' и возвращаемый из метода класса оба имеют тип 'float'. Хотя код содержит несколько исходных файлов (от которых я ожидаю решить еще несколько проблем в ближайшие несколько дней), они оба находятся в одном и том же. Эта проблема, очевидно, вызвана ошибкой в ​​способе, которым я вызываю приближение «прибл.» (), Но поиск в Интернете до сих пор не нашел никаких ответов на мой вопрос.

Как новичок, у меня нет опыта работы с мультимодельным кодом ИЛИ с использованием статических методов / методов класса, и я, безусловно, буду признателен за любую помощь в этом. Заранее спасибо: -)

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

Методы класса donot относятся к любому конкретному экземпляру класса. Итак, попробуйте передать сообщение самому классу -

T = [ Anneal approxInitT ];
1 голос
/ 18 февраля 2011

self ссылается на экземпляр определенного класса, но когда вы вызываете метод класса (+approxInitT), вы должны отправить сообщение вашему классу: T=[Anneal approxInitT]

...