Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C类中的关系_Objective C - Fatal编程技术网

Objective-C类中的关系

Objective-C类中的关系,objective-c,Objective C,我真的很犹豫问这个问题,因为肯定会有一个非常简单的答案,但我就是想不出来。下面是: 我在一个名为Copier.h的文件中有这个Objective-C代码: #import <Cocoa/Cocoa.h> #import "CopyQueue.h"; @interface Copier : NSObject { IBOutlet NSTextField *statusField; IBOutlet NSTextField *toField; CopyQueu

我真的很犹豫问这个问题,因为肯定会有一个非常简单的答案,但我就是想不出来。下面是:

我在一个名为
Copier.h
的文件中有这个Objective-C代码:

#import <Cocoa/Cocoa.h>
#import "CopyQueue.h";


@interface Copier : NSObject {
    IBOutlet NSTextField *statusField;
    IBOutlet NSTextField *toField;
    CopyQueue *queue;
}
- (IBAction)startCopy:(id)sender;
- (void)dropFile:(NSString *)theFileName;
@end
#导入
#导入“CopyQueue.h”;
@接口复制器:NSObject{
IBNstextField*状态字段;
IBNStextfield*toField;
CopyQueue*队列;
}
-(iAction)startCopy:(id)发送方;
-(void)dropFile:(NSString*)文件名;
@结束
每当我试图在Xcode中编译我的项目时,我都会在它显示
CopyQueue*queue的行中得到一个语法错误我做错了什么

当我将行更改为
id*队列时,文件将编译,但这不是解决方案,不是吗?将所有键入的引用替换为泛型引用?

尝试

@class CopyQueue  

@interface {
     ...
}

...

@end

预删除CopyQueue应该是不必要的(David McGraw发布的“@class CopyQueue”),因为海报已经写了行“#import“CopyQueue.h”;”。也许导入“CopyQueue”后不必要的“;”会导致问题


无论如何,请确保CopyQueue在CopyQueue.h文件中正确声明(拼写和大小写相同)。

这根本不是一个愚蠢的问题。它反映了使用静态类型的编译语言(如C和Objective-C,即C超集)的一个更复杂的方面.对于来自动态类型语言(如Python、Ruby、PHP等)的人来说,这可能是一个稍微有点颠簸的过渡

在使用类型(在C、Objective-C或C++中)之前,必须声明该类型。CopyQueue是一个类型,因此必须声明它(使用
@interface CopyQueue:SomeClass{}@end
或使用
@class CopyQueue
隐式声明。在您发布的示例中,Cocoa程序员会假设CopyQueue.h包含如下内容

@interface CopyQueue : SuperClass { //where SuperClass is the name of the class that CopyQueue inherits from

  ...
  }
...
@end
如果不是这样(您对Lyndsey Ferguson的评论表明不是这样),则必须包含定义CopyQueue类类型的头文件(如上所述),或者告诉编译器CopyQueue是一个类(使用
@class CopyQueue


@class CopyQueue
声明是一种告诉编译器它可以将
CopyQueue*
视为指向Objective-C类(类型id)的指针的方式,并且您稍后将通过
@接口(例如在单独的模块中)填写详细信息(例如CopyQueue的实例变量和方法).

你确保包含CopyQueue的定义了吗?太棒了!你是最棒的:)我不知道我怎么会错过。CopyQueue.h,据我所知,是正确的。删除#import“CopyQueue.h后的分号“然而,一切都没有改变。CopyQueue.h是否必须包含@class CopyQueue语句?请查看位于的源代码。CopyQueue的定义包含在文件中,但我仍然需要@class行使其工作。(这对我来说没问题)你有一个循环引用:Copier.h imports CopyQueue.h which imports Copier.h。在本例中,您是正确的:您需要使用forward@class声明。您可以使用@class CopyQueue行从标题中删除#import CopyQueue.h。