Синтаксис метода Objective-C адрес - PullRequest
0 голосов
/ 06 июня 2009

Я пытаюсь создать метод, который принимает несколько параметров, используя & (для адреса). Я хотел бы, чтобы метод выполнял некоторые вычисления и корректировал параметры, чтобы их можно было использовать в других местах.

Я определил метод как:

- (void) convertParameters: (double *)x: (double *)y: (double *)z: (double *)height: (double *)width: (double *)phi: (double *)theta: (double *)psi: (int) topLeft: (int) topRight: (int) bottomLeft: (int) bottomRight 
{
  ...
}

Я не могу понять, как вызвать метод. Я пытался это:

double x, y, z, height, width, phi, theta, psi;

[self convertParameters: &x &y &z &height &width &phi &theta &psi topLeft topRight bottomLeft bottomRight]; 

но я получаю эти ошибки от Xcode:

ошибка: недопустимые операнды в двоичный файл &

ошибка: синтаксическая ошибка перед topRight

ошибка: недопустимые операнды в двоичный файл &

ошибка: синтаксическая ошибка перед 'topRight'

Ранее я определил topRight и т. Д. Как: const int topLeft = 25; const int topRight = 29; const int bottomLeft = 17; const int bottomRight = 13; и они могут быть использованы в другом месте кода. Я озадачен тем, как решить эту проблему.

Ответы [ 2 ]

6 голосов
/ 06 июня 2009

Ваше определение метода испорчено. У вас есть объявления типов, но нет реальных параметров. Вы, кажется, путаете имена параметров в имени метода с фактическими аргументами, но это разные вещи. Это должно быть что-то вроде:

- (void) convertX:(double *)x y:(double *)y z:(double *)z height:(double *)height width:(double *)width phi:(double *)phi theta:(double *)theta psi:(double *)psi topleft:(int)topLeft topRight:(int)topRight bottomLeft:(int)bottomLeft bottomRight:(int)bottomRight 
{
  ...
}

Посмотрите, как у вас есть "y:" часть имени метода, за которой следует аргумент (double *)y? Вот как это работает. Нельзя помещать типы в части имени метода.

Вам также необходимо указать имя при вызове метода. Недостаточно просто называть переменные после частей имени метода. Так что вы бы назвали это как:

[self convertX:&x y:&y z:&z height:&height width:&width phi:&phi theta:&theta psi:&psi topLeft:topLeft topRight:topRight bottomLeft:bottomLeft bottomRight:bottomRight]
5 голосов
/ 06 июня 2009

В Objective-C имя метода включает все двоеточия для аргументов. Поскольку вы не назвали свои аргументы, подпись для вышеупомянутого метода будет:

convertParameters::::::::::::;

Тем не менее, это довольно громоздко для использования (и трудно запомнить), поэтому наиболее распространенный способ реализации ваших методов - предоставить имена для аргументов, которые объясняют, что они делают.

Аргументы принимают форму:

[argumentName]: ([argument type])[argumentIdentifier]

с каждым аргументом, разделенным пробелом, и где argumentName, за которым следует двоеточие, используются для передачи аргумента в ваш метод.

Лучший способ назвать ваш метод:

- (void)convertParametersWithX: (double*)x
                         withY: (double*)y
                         withZ: (double*)z
                        height: (double*)height
                         width: (double*)width
                           phi: (double*)phi
                         theta: (double*)theta
                           psi: (double*)psi
                       topLeft: (int)topLeft
                      topRight: (int)topRight
                    bottomLeft: (int)bottomLeft
                   bottomRight: (int)bottomRight;

Это тогда будет называться следующим образом:

[receiver convertParametersWithX: &x
                           withY: &y
                           withZ: &z
                          height: &height
                           width: &width
                             phi: &phi
                           theta: &theta
                             psi: &psi
                         topLeft: topLeft
                        topRight: topRight
                      bottomLeft: bottomLeft
                     bottomRight: bottomRight];

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...