Объявление функций с использованием NSArray в качестве аргументов - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть функция следующим образом:

-(int)ladderCalc:(NSArray*)amounts percentages:(NSArray*)percentages amount:(int)amount
{

   // Do some stuff

   return foo;
}

Я объявил так в заголовочном файле:

-(int)ladderCalc:(NSArray*)amounts percentages:(NSArray*)percentages amount:(int)amount;

Но я получаю ошибку "неявное объявление функции недопустимо в c99", когда я пытаюсь использовать значение int, возвращенное в другом месте того же файла. Я правильно не объявляю функцию?

UPDATE

Я понимаю, что не объявляю это стандартным способом, я изменил свое объявление на рекомендацию MarkGranoff (см. Изменения выше), но на этот раз я все еще получаю это предупреждение.

Вот контекст того, как я вызываю эту функцию:

-(int)fooTotal: (int)amount 
{

   int totalFee = 0;

   // Declare arguments
   NSArray *percentages = [[NSArray alloc] initWithObjects:firstValue, secondValue, thirdValue, fourthValue, fifthValue, nil];
   NSArray *amounts = [[NSArray alloc] initWithObjects:sixthValue, seventhValue, eigthValue, ninthValue, nil];

   totalFee = ladderCalc(amounts,percentages,amount);

   return totalFee;
}

Итак, я все еще получаю предупреждение, хотя, похоже, это имеет смысл в том, что касается стиля Obj-C.

Я почти уверен, что неправильно вызываю эту функцию, я получаю нераспознанную ошибку символа при компиляции проекта.

Undefined symbols for architecture i386:
  "_ladderCalc", referenced from:
      -[FeeCalcLibrary getMFModelTotal:] in FeeCalcLibrary-A83D2A7637F57664.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Попробуйте вместо этого:

-(int)ladderCalc:(NSArray*)amounts percentages:(NSArray*)percentages amount:(int)amount;

и измените сигнатуру реализации для соответствия.Затем у вас есть аргументы с именами, на которые вы можете ссылаться в коде метода.А именно: суммы, проценты и сумма.

0 голосов
/ 17 ноября 2011

Как говорит @MarkGranoff.

У Objective-C аргументы перемежаются с именем метода.

Для объявления метода:

-(int)ladderCalcWithAmounts:(NSArray*)amounts percentages:(NSArray*)percentages amount:(int)amount;

имя метода(двоеточия являются частью имени):

ladderCalc:percentages:amount:

В имени метода добавлены аргументы:

(NSArray*)amounts
(NSArray*)percentages
(int)amount;

Эта улучшенная читаемость по сравнению с вызовом функции "C", которая может быть:

int ladderCalcPercentagesAmount(NSArray *amounts, NSArray *percentages, amount);

Технически, Objective-C не имеет именованных параметров, скорее вкрапленных параметров.Именованные параметры подразумевают, что позиция не важна только для связанных имен, примером являются именованные параметры Python.

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