“隐含的功能声明'......'在C99中无效”

时间:2012-12-06 21:50:52

标签: iphone objective-c ios xcode

我正在尝试为iphone制作一个简单的音板应用程序,但遇到了一些麻烦,包括implicit definition of function '...' is invalid in C99,有几个不同的功能。

我的.h文件如下所示:

#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>


@interface ViewController : UIViewController

{

}

- (IBAction) Jesus: (id) sender;

@end

我的.m文件代码如下所示:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}



- (IBAction) NamedAction:(id)sender: (id) sender
{
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef soundFileURLRef;
    soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"Jesus",
    CSFTR("WAV") NULL);
    if  (soundFileURLRef) {
        CFStringRef url = CFURLGetString(soundFileURLRef);
        NSLog(@"string for URl is %@", (__bridge NSString *) url);
    }

    UInt32 soundID;
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
    AudioServicesPlaySystemSound(soundID);

}


@end

我收到的错误消息是:

  

被调用对象类型'int'不是函数或函数指针

4 个答案:

答案 0 :(得分:3)

- (IBAction) NamedAction:(id)sender: (id) sender

有变量命名相同,可能第二个是拼写错误:

- (IBAction) NamedAction: (id) sender

soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"Jesus", CSFTR("WAV") NULL);

可能在NULL之前缺少逗号?

soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"Jesus", CSFTR("WAV"), NULL);

答案 1 :(得分:1)

CSFTR的功能是什么?显然编译器从来没有听说过它,这就是它所说的(以一种相当奇怪的方式。在C99之前,使用没有声明的函数是在隐式声明中,C99删除了它)。

您是否尝试使用名称略有不同的宏?

我真的建议您避免使用Core Foundation功能。特别是因为NSBundle和CFBundle可以表现不同。 Core Foundation和ARC尤其是一种可以让你的大脑受到伤害并且可能导致内存泄漏或崩溃的组合,除非你真的知道你在做什么。

答案 2 :(得分:0)

你忘了为你的项目添加一个框架,我怀疑它是AudioToolBox

答案 3 :(得分:0)

在“其他警告”标志中添加-Wno-implicit-function-declaration,您将能够编译代码。虽然它不是一个好的解决方案,但它会起作用。