-5

重複の可能性:
エラー: Specifier-qualifier-list が必要です…Objective C で?

正直なところ、ここで何が問題なのかわかりません。このコードは以前に機能し、関連するすべてのファイルは適切に作成され、独自にコンパイルされます (それぞれの.mファイルも含む) が.h、私の OC プロジェクトには、Xcode が常に同じコンパイル エラーをスローするファイルが 1 つあります。場合によっては 1 行に複数回、場合によっては 1 回だけですが、常にuseCommand変数に対してです。.h以下は、影響を受けるファイル全体のスクリーンショットとコピー アンド ペーストされたコードです。コンパイルされない唯一のファイルです。へのすべての参照をコメントアウトすると、プログラムは完全に実行されますがuseCommand、コメントを解除すると、これが再び発生します。新しいプロジェクトを作成し、すべてのコードをコピーして新しいファイルに貼り付けても、このエラーは引き続き表示されます。を動かすとuseCommand新しい行への参照、Xcode のエラーがそれに続きます。Xcodeで何が起こっているか知っている人はいますか? コードがすべて適切であることを確認するためにコードを 4 重にチェックし、ターゲットを数回クリーンアップしたため、これは私の間違いではないと確信しています。

Xcode は useCommand の確認を拒否します

クラス


Minecraftia.h

//
//  Minecraftia.h
//  TextCraft
//
//  Created by Supuhstar on 4/3/12.
//  Copyright 2012 Blue Husky Programming. All rights reserved.
//

#import <Cocoa/Cocoa.h>
#import "Command.h"
#import "HelpCommand.h"
#import "UseCommand.h"
#import "GetCommand.h"
#import "LookCommand.h"
#import "IO.h"

@interface Minecraftia : NSObject
{
    HelpCommand *helpCommand;
    UseCommand *useCommand;
    GetCommand *getCommand;
    LookCommand *lookCommand;
}
-(id)init;

/**
 * If none has already been created, creates a static instance of Minecraftia
 * 
 * Returns the same instance of Minecraftia each time
 */
+(Minecraftia *)sharedInstance;

/**
 * Turns the given string into a command
 * If no matching command is found, nil is returned
 */
-(Command *)toCommand:(NSString *)input;

/**
 * The main method of the game, wherein all interactions happen
 */
-(void)play;

/**
 * Returns a random message to be used as splash text when the program is started
 */
-(NSString *)getASplash;

/**
 * Returns an NSArray of all the available commands
 */
-(NSArray*)getRegisteredCommands;

@property (retain, nonatomic, readonly) HelpCommand *helpCommand;
@property (retain, nonatomic, readonly) UseCommand *useCommand;
@property (retain, nonatomic, readonly) GetCommand *getCommand;
@property (retain, nonatomic, readonly) LookCommand *lookCommand;
@end

HelpCommand.h

//
//  HelpCommand.h
//  TextCraft
//
//  Created by Student4 on 4/9/12.
//  Copyright 2012 Blue Husky Programming. All rights reserved.
//

#import <Cocoa/Cocoa.h>
#import "Command.h"
#import "Minecraftia.h"

@interface HelpCommand : Command {

}

@end

HelpCommand.m

//
//  HelpCommand.m
//  TextCraft
//
//  Created by Student4 on 4/9/12.
//  Copyright 2012 Blue Husky Programming. All rights reserved.
//

#import "HelpCommand.h"


@implementation HelpCommand
-(bool)execute:(NSArray *)info
{
    NSString *helpString = @"Here are all the available commands:\n";
    NSArray *commands = [[Minecraftia sharedInstance] getRegisteredCommands];
    for(int i=0, l=[commands count]; i < l; i++)
    {
        helpString = [NSString stringWithFormat:@"\t> %@", [helpString stringByAppendingString:[[[commands objectAtIndex:i] class] triggerText]]];
    }
    MyLog([NSString stringWithFormat:@"%@\n\n", helpString]);
    return true;
}



+(NSString *)triggerText
{
    static NSString *triggerText = @"HELP";
    return triggerText;
}
@end
4

1 に答える 1

2

ヘッダーがどうしても必要な場合を除いて、インポートの代わりに@classを使用してから、インポートを.mファイルに移動します。現在、コンパイラをループに入れています。Minecraftia.hはUseCommand.hをインポートし、UseCommand.hはMinecraftia.hをインポートしています。

次のようになります。

#import <Cocoa/Cocoa.h>
#import "IO.h"

@class Command, HelpCommand, UseCommand, GetCommand, LookCommmand;

@interface Minecraftia : NSObject
{
    HelpCommand *helpCommand;
    UseCommand *useCommand;
    GetCommand *getCommand;
    LookCommand *lookCommand;
}

/* .... */

@end
于 2012-04-10T12:59:16.250 に答える