简体   繁体   English

预期的标识符或'('

[英]expected identifier or '('

I can't seem to squash this bug! 我似乎无法解决这个错误!

I am working on a small project, trying to add background audio to my app. 我正在做一个小项目,试图将背景音频添加到我的应用中。 I was doing pretty well until this error showed up. 在出现此错误之前,我一直表现不错。

Error on line 52 on .m file: .m文件的第52行错误:

//
//  UDMenuScene.m
//  iLabyrinth
//
//  Created by Rolandas Razma on 5/12/10.
//  Copyright 2010 UD7. All rights reserved.
//

#import "UDMenuScene.h"
#import "UDPickMapScene.h"
#import "SimpleAudioEngine.h"
#import "UDHelpScene.h"
#import "iLabyrinth.h"
#import "CCDirector.h"

@implementation UDMenuScene
#pragma mark -
#pragma mark NSObject

- (id)init 
{
    if( (self = [super init]) )
    {
         [self addChild:[UDMenuLayer node]];
    }
    return self;
}

@end

@implementation UDMenuLayer
#pragma mark -
#pragma mark NSObject

- (id)init {

    if( (self = [super init]) )
    {
        [self setIsTouchEnabled: YES];
        CGSize _winSize = [[CCDirector sharedDirector] winSize];
        //AVAudioPlayer *player;
        NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"menu" ofType:@"mp3"]];
        NSError *error;
        player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
        // Add background
        CCSprite *sprite = [CCSprite spriteWithFile:[NSString stringWithFormat:@"menu%@.png", (isDeviceIPad()?@"~ipad":([iLabyrinth hightRes]?@"@2x":@""))]];
        [sprite setAnchorPoint:CGPointZero];
        [self addChild:sprite];
        _backgroundLayer = [CCSpriteBatchNode batchNodeWithFile:[iLabyrinth textureName]];
        [[_backgroundLayer texture] setAliasTexParameters];
        [self addChild:_backgroundLayer];
        // Add "Pay" button
        CCSprite *playSprite = [CCSprite spriteWithSpriteFrameName:@"play.png"];
            [playSprite setTag:MenuButtonPlay];
            [playSprite setAnchorPoint:CGPointMake(0.5f, 0.0f)];
            [playSprite setPosition:CGPointMake(_winSize.width /2, _winSize.height /2)];
        [_backgroundLayer addChild:playSprite];

        // Add "Help" button        
        CCSprite *helpSprite = [CCSprite spriteWithSpriteFrameName:@"help.png"];
            [helpSprite setAnchorPoint:CGPointMake(0.5f, 1.0f)];
            [helpSprite setTag:MenuButtonHelp];
            [helpSprite setPosition:CGPointMake(_winSize.width /2, _winSize.height /2 -[helpSprite boundingBox].size.height /2)];
        [_backgroundLayer addChild:helpSprite];
    }

    return self;
}


#pragma mark -
#pragma mark CCStandardTouchDelegate


- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    CGPoint touchPoint = [_backgroundLayer convertTouchToNodeSpace:[touches anyObject]];

    for( CCSprite *sprite in [_backgroundLayer children] ){
        if( [sprite tag] <= 0 ) continue;

        if( CGRectContainsPoint([sprite boundingBox], touchPoint) ){

            [sprite setColor:ccGREEN];
            [[SimpleAudioEngine sharedEngine] playEffect:@"click.caf"];

            switch ( [sprite tag] ) {
                case MenuButtonPlay: {
                    [[CCDirector sharedDirector] replaceScene:[CCTransitionSplitRows transitionWithDuration:1.0f scene:[UDPickMapScene node]]];
                    break;
                }
                case MenuButtonHelp: {
                    [[CCDirector sharedDirector] replaceScene:[CCTransitionSplitRows transitionWithDuration:1.0f scene:[UDHelpScene node]]];
                    break;
                }
            }

            return;
        }

    }

}


@end

and here is my .h file: 这是我的.h文件:

//
//  UDMenuScene.h
//  iLabyrinth
//
//  Created by Rolandas Razma on 5/12/10.
//  Copyright 2010 UD7. All rights reserved.
//

#import "cocos2d.h"
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

typedef enum {
    MenuButtonPlay =1,
    MenuButtonHelp,
    MenuButtonPlayHeaven,
} MenuButton;

@class player;

@interface UDMenuScene : CCScene {

}
@property (nonatomic, retain) AVAudioPlayer *player;
@end

@interface UDMenuLayer : CCLayer {
    CCSpriteBatchNode   *_backgroundLayer;
}
@end

You are declaring a class called player . 您要声明一个名为player的类。

@class player;

(forward declaration saying player is a class type) (说player是班级类型的向前声明)

but you are also using player as an identifier 但您也使用player作为标识符

@property (nonatomic, retain) AVAudioPlayer *player;

(property declaration saying player is an instance of AVAudioPlayer ). (属性声明说playerAVAudioPlayer一个实例)。

To prevent similar errors, never ever declare classes with names starting with lowercase letter (use Player instead) and also use a custom prefix to avoid name collisions (eg MYPlayer ). 为了避免类似的错误,永远不要声明名称以小写字母开头的类(改用Player ),也不要使用自定义前缀来避免名称冲突(例如MYPlayer )。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM