函数’…’的隐式声明在C99上无效

我还在开发一款名为Cruzia的iPhone应用程序,我现在想知道为什么我在ViewController.m和三个错误中都发出这两个警告,这些都是Apple Mach-O链接器错误。 如果你能指出我的方向,我会非常感激。 我在viewcontroller.m的副本中评论了下面的警告:

#import "CIAViewController.h" @interface CIAViewController() @end @implementation CIAViewController -(IBAction)press { cruzia.hidden = 0; textarea.hidden = 0; playbtn.hidden = 1; tutorialbtn.hidden = 1; optionsbtn.hidden = 1; trainingbtn.hidden = 1; back.hidden = 0; cruzia.text = @"Play"; textarea.text = @"Hello! You are playing the game of Cruzia!"; // declare defaults it is not declared elsewhere within your view controller NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // The stringForKey method returns a String and not a Boolean value // However, if you just want to check if a value exists then it is implied you are checking for existence // If there is no value then it will return nil and statement will fail // You had "== YES" outside of the parenthesis which is an illegal statement if ([defaults stringForKey:kMusic]) { CFBundleRef mainBundle = CFBundleGetMainBundle(); CFURLRef soundFileURLRef; soundFileURLRef =CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"click", CFSTR ("wav"), NULL); UInt32 soundID; AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); AudioServicesPlaySystemSound(soundID); } } -(IBAction)press2 { cruzia.hidden = 0; textarea.hidden = 0; playbtn.hidden = 1; tutorialbtn.hidden = 1; optionsbtn.hidden = 1; trainingbtn.hidden = 1; back.hidden = 0; cruzia.text = @"Tutorial"; textarea.text = @"Welcome! You are watching the Cruzia tutorial!"; // declare defaults it is not declared elsewhere within your view controller NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // The stringForKey method returns a String and not a Boolean value // However, if you just want to check if a value exists then it is implied you are checking for existence // If there is no value then it will return nil and statement will fail // You had "== YES" outside of the parenthesis which is an illegal statement if ([defaults stringForKey:kMusic]) { CFBundleRef mainBundle = CFBundleGetMainBundle(); CFURLRef soundFileURLRef; soundFileURLRef =CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"click", CFSTR ("WAV"), NULL); UInt32 soundID; AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); AudioServicesPlaySystemSound(soundID); } } -(IBAction)press3 { cruzia.hidden = 0; textarea.hidden = 0; playbtn.hidden = 1; tutorialbtn.hidden = 1; optionsbtn.hidden = 1; trainingbtn.hidden = 1; back.hidden = 0; cruzia.text = @"Options"; textarea.text = @"Hello! You have clicked Options. Sadly, you need to open Settngs and go to the Cruzia area to get most of the options of the game."; CFBundleRef mainBundle = CFBundleGetMainBundle(); CFURLRef soundFileURLRef; soundFileURLRef =CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"click", CFSTR ("WAV"), NULL); UInt32 soundID; AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); AudioServicesPlaySystemSound(soundID); } -(IBAction)press4 { cruzia.hidden = 0; textarea.hidden = 0; playbtn.hidden = 1; tutorialbtn.hidden = 1; optionsbtn.hidden = 1; trainingbtn.hidden = 1; back.hidden = 0; cruzia.text = @"Training"; textarea.text = @"This is the training area. You can improve your Cruzia skills here!"; // declare defaults it is not declared elsewhere within your view controller NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // The stringForKey method returns a String and not a Boolean value // However, if you just want to check if a value exists then it is implied you are checking for existence // If there is no value then it will return nil and statement will fail // You had "== YES" outside of the parenthesis which is an illegal statement if ([defaults stringForKey:kMusic]) { CFBundleRef mainBundle = CFBundleGetMainBundle(); CFURLRef soundFileURLRef; soundFileURLRef =CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"click", CFSTR ("WAV"), NULL); UInt32 soundID; AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); AudioServicesPlaySystemSound(soundID); } } -(IBAction)press5 { cruzia.hidden = 0; textarea.hidden = 0; playbtn.hidden = 0; tutorialbtn.hidden = 0; optionsbtn.hidden = 0; trainingbtn.hidden = 0; back.hidden = 1; cruzia.text = @"Cruzia"; textarea.text = @""; // declare defaults it is not declared elsewhere within your view controller NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // The stringForKey method returns a String and not a Boolean value // However, if you just want to check if a value exists then it is implied you are checking for existence // If there is no value then it will return nil and statement will fail // You had "== YES" outside of the parenthesis which is an illegal statement if ([defaults stringForKey:kMusic]) { CFBundleRef mainBundle = CFBundleGetMainBundle(); CFURLRef soundFileURLRef; soundFileURLRef =CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"click", CFSTR ("WAV"), NULL); UInt32 soundID; AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); AudioServicesPlaySystemSound(soundID); } } - (void)viewDidLoad { textarea.hidden = 1; playbtn.hidden = 0; tutorialbtn.hidden = 0; optionsbtn.hidden = 0; trainingbtn.hidden = 0; back.hidden = 1; cruzia.text = @"Cruzia"; [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateSettings:) name: NSUserDefaultsDidChangeNotification object:nil]; [self setupDefaults]; } - (void)viewDidUnload { [super viewDidUnload]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidFinishLaunchingNotification object:nil]; } -(void) setupDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *violenceValue = [defaults stringForKey:kViolenceMode]; if ( violenceValue == nil ) { NSString *pathStr = [[NSBundle mainBundle] bundlePath]; NSString *settingsBundlePath = [pathStr stringByAppendingPathComponent:@"Settings.bundle"]; NSString *finalPath = [settingsBundlePath stringByAppendingPathComponent:@"Root.plist"]; NSDictionary *settingsDictionary = [NSDictionary dictionaryWithContentsOfFile:finalPath]; NSArray *prefSpecifierArray = [settingsDictionary objectForKey:@"PreferenceSpecifiers"]; NSString *isMusicOn, *isSoundOn; NSDictionary *prefItem; for (prefItem in prefSpecifierArray) { NSString *keyValue = [prefItem objectForKey:@"Key"]; id defaultValue = [prefItem objectForKey:@"DeafultValue"]; if ([keyValue isEqualToString:kSound]) { isSoundOn = defaultValue; } else if ([keyValue isEqualToString:kMusic]) { isMusicOn = defaultValue; } NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys: isSoundOn, kSound, isMusicOn, kMusic, nil]; [defaults registerDefaults:appDefaults]; [defaults synchronize]; } } } @end 

这里是一个链接到我打开调试和输出面板的其他错误的地方的屏幕截图。

在此处输入图像描述

再次感谢, – 乔治

由于构建日志说缺少这两个符号:

AudioServicesCreateSystemSoundID和AudioServicesPlaySystemSound

简单的解决方案是,您需要将“AudioToolbox”框架添加到项目中。