Почему я вижу ошибку «Вложенные функции отключены»?

Привет, я новичок в Objective-C и вообще в программировании. У меня есть небольшой опыт работы с C# и C++, чтобы дать вам немного информации. Я использую Xcode для создания простого приложения, которое добавляет 2 поля и возвращает сумму, и я сузил его до одной ошибки:

"Вложенные функции отключены, используйте -fnested-functions для повторного включения"

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

-(IBAction)click:(id)sender;
{
int main (int argc, const char *argv[]){
  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

  int sum;

  sum = myInt1, myInt2;
  NSLog (name, @", the answer is %i", sum);
  [pool drain];

  return 0;
 }
}

person jxd215    schedule 13.09.2009    source источник
comment
Похоже, вы пытаетесь определить функцию main() вашей программы вместо метода click:. Вы почти наверняка не хотите этого делать.   -  person Wooble    schedule 14.09.2009
comment
Я не могу отредактировать ваш пост, но, похоже, вам нужно установить код, чтобы он хорошо отображался (я бы предложил поместить его между тегами pre).   -  person G Gordon Worley III    schedule 14.09.2009
comment
Гордон: я не совсем уверен, что вы имеете в виду, он находится за предварительными тегами и отлично отображается для меня :/   -  person jxd215    schedule 14.09.2009
comment
Неважно, похоже, что кто-то другой сделал это за вас.   -  person G Gordon Worley III    schedule 14.09.2009
comment
@jxd: вообще говоря, не используйте теги ‹pre› для кода на SO, это всегда выглядит неправильно. Используйте кнопку кода (ту, на которой стоят 1 и 0) или поставьте четыре пробела в начале строки, и она сделает форматирование за вас.   -  person 1800 INFORMATION    schedule 14.09.2009


Ответы (3)


То, что вы пытаетесь сделать здесь, обычно не разрешено в языках C. Как правило, вы не можете создать функцию внутри другой, как в таких языках, как Pascal и JavaScript. Вы должны удалить основные вещи изнутри click: и просто оставить строки

int sum;

sum = myInt1, myInt2;
NSLog (name, @", the answer is %i", sum);

В более широком смысле, обратите внимание, почему вы пытаетесь создать основную часть внутри click:? В Objective-C вы обычно используете main() только для создания любых объектов корневого уровня и создания экземпляра пула автоматического выпуска. Предполагая, что вы работаете с Xcode на Mac, если вы используете один из шаблонов для начала работы, он должен позаботиться обо всех деталях создания файла main. Я бы посоветовал взглянуть на учебные пособия Apple Cocoa, чтобы помочь вам понять, как структурировано типичное приложение Objective-C.

person G Gordon Worley III    schedule 13.09.2009
comment
Большое спасибо за ваш совет, Гордон, я подобрал несколько книг и в последнее время много читал по этому вопросу, как я уже сказал, я совсем новичок в общем C. Итак, все еще пытаюсь выработайте изломы, выполнив несколько очень простых приложений и изучив веревки. Еще раз спасибо за оперативный ответ :) - person jxd215; 14.09.2009

Вы каким-то образом засунули функцию main() в свой метод click:, что не имеет никакого смысла. Вы не можете вставить main() внутрь функции-члена класса в C++ или метода в C#, и это совершенно одно и то же. main() должна быть собственной функцией (Xcode должен был предоставить готовый файл main.m, который вам не нужно изменять), а click: должен содержать только ту функциональность, которую вы хотите, чтобы он выполнял.

person Chuck    schedule 13.09.2009

хорошо, хорошо.. Я вижу, у вас уже есть кнопка и действие для нее, названное «щелчок».. вы могли бы написать это так:

-(IBAction)click:(id)sender;
{
  int sum;

  sum = myInt1, myInt2;
  NSLog (name, @", the answer is %i", sum);
 }
}

Или создайте простой проект Foundation Tool и поместите его в:

int main (int argc, const char *argv[]){
  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

  int sum;

  sum = myInt1, myInt2;
  NSLog (name, @", the answer is %i", sum);
  [pool drain];

  return 0;
 }

проблема, с которой вы столкнулись, заключается в том, что вы пытались объявить основную функцию внутри метода щелчка. Это не имеет никакого смысла. Поэтому, если вы новичок, попробуйте учиться, используя проекты базовых инструментов, а не проекты графического интерфейса.

person Woofy    schedule 13.09.2009
comment
Нет никаких причин, по которым новички не могут учиться на проектах с графическим интерфейсом. Я уверен, что нет учебника, который сказал бы ему сделать это. - person Chuck; 14.09.2009
comment
На мой взгляд, относительно любого языка программирования лучше всего начинать с консольных программ, чтобы изучить синтаксис языка, функции, возможности, а затем перейти к графическому интерфейсу... если вы начнете с графических проектов с самого начала, вы узнаете что вы не умеете делать простые вещи, потому что не знаете даже самого языка и того, что с ним можно делать. И я говорю из своего собственного опыта, потому что это проверенная техника, так как мне удалось выучить почти десять языков программирования, используя эту технику. - person Woofy; 14.09.2009