为什么我看到“嵌套函数被禁用”错误?

时间:2009-09-13 20:05:59

标签: objective-c

嘿那里,我是Objective-C的新手,以及一般的编程。我有一点C#和c ++的经验,给你一些背景知识。我正在使用Xcode创建一个简单的应用程序,它添加了两个字段并返回一个总和,我将其缩小为一个错误:

  

“禁用嵌套函数,使用-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;
 }
}

3 个答案:

答案 0 :(得分:5)

您在这里尝试做的事情是C语言通常不允许的。通常,您不能在另一个函数内部创建函数,就像在Pascal和JavaScript等语言中一样。你应该从click:内部删除主要内容并保留行

int sum;

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

但是,更广泛的说明,为什么要尝试在click:内部创建主要内容?在Objective-C中,您通常只使用main()来创建任何根级对象并实例化自动释放池。假设你在Mac上使用Xcode,如果你使用其中一个模板开始,它应该为你创建main的所有细节。我建议看看Apple的Cocoa教程,以帮助您了解典型的Objective-C应用程序的结构。

答案 1 :(得分:2)

您已经以某种方式将main()函数卡在click:方法中,这没有任何意义。您不能将main()粘贴到C ++中的类成员函数或C#中的方法中,这是完全相同的。 main()应该是它自己的函数(Xcode应该提供一个你不需要更改的现成的main.m文件),click:应该只包含你希望它执行的功能

答案 2 :(得分:1)

好吧,好吧..我看到你已经有一个按钮和一个动作,命名为“点击”..你可以这样写:

-(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;
 }

你遇到的问题是你尝试在click方法中声明main函数..它没有任何意义。因此,如果您是初学者,请尝试使用基础工具项目,而不是gui项目。