Вызов метода экземпляра из метода класса: возможно или нет? - PullRequest
0 голосов
/ 19 февраля 2011

В предыдущем посте я объяснил, что я конвертирую старую программу «C» в Objective-C, и узнал разницу между статическими методами обмена сообщениями (старая версия) и методами класса.

Однако как это сделать?Теперь я получаю метод класса для вызова метода экземпляра (при условии, что это даже возможно)?Вот оригинальная (статическая) функция:

static int newSplitB(int b, int hi, int lo, int found)
{
 int hlp;

 if(hi - lo <= 1)
   return 0;

  bIs(lo + (hi - lo + 1) / 2); // calls function bIs();
  return 1;
}

и точно такой же код, «переведенный» в Obj-C:

+(int)newSplitB :(int)b :(int)hi :(int)lo :(int)found
{
int hlp;

if((hi - lo) <= 1)
    return 0;

[TablesClass bIs:(lo+(hi-lo+1)/2)]; // gives compile error
return 1;
}

Функция 'bIs ()' - оторвана длякраткость - находится в отдельном исходном файле в моем классе «Таблицы».К сожалению, попытка построить программу выдает мне необъявленную ошибку 'TablesClass' (первое использование в этой функции), даже несмотря на то, что класс был выделен / инициирован ранее в том же файле реализации.

Я искалнет часов для решения, но безрезультатно.Если то, что я пытаюсь сделать, не возможно, как я могу изменить последний метод, чтобы сделать то, что я после?Заранее спасибо: -)

Ответы [ 3 ]

1 голос
/ 19 февраля 2011

Вы сказали, что ранее «выделяли / инициировали» TableClass в том же файле реализации, но похоже, что вы используете его как статический метод.Вам не нужно выделять / инициализировать экземпляр класса, когда вы хотите использовать его статические методы.Кроме того, если вы выделяете / init в экземпляре TableClass, то это означает, что вы сохранили его где-нибудь, к которому статический метод newSplitB мог получить доступ.

1 голос
/ 19 февраля 2011

это возможно, и это невозможно, в зависимости от того, как вы смотрите:

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

без экземпляра класса вы нигде не можете вызвать метод экземпляра.

Вы можете вызывать методы класса из любого места (при условии, что это видно в переводе).

если bIS - это просто функция c, тогда не нужно для того, чтобы он был методом экземпляра. на самом деле, вы можете оставить это как функцию c.

(возможно, расширенный пример поможет нам понять, почему это должен быть метод экземпляра)

1 голос
/ 19 февраля 2011

Убедитесь, что вы импортируете файл TablesClass.h, иначе текущий класс не будет знать о его существовании и является распространенной проблемой при работе с этой ошибкой.

...