在Objective-C编译我试图编译在Ubuntu Linux的12 Objective-C代码时“结构StructName”消息的重新定义。错误:在Linux上
main.m文件看起来是这样的:
#import <Foundation/Foundation.h>
#import "CEFoo/CEFoo.h"
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog (@"hello world");
[pool drain];
return 0;
}
在CEFoo.h,我的定义是:
struct StructName{ // line 86
BOOL first;
...
...
};
@interface StructName :NSObject // line 92
BOOL first; // line 93
...
...
@end // 96
当我去
gcc main.m `gnustep-config --objc-flags` -lgnustep-base -o main.bin
我得到编译此消息:
Foo/CEFoo.h:93:1: error: redefinition of ‘struct StructName’
Foo/CEFoo.h:86:8: note: originally defined here
我读过这可以通过重新定义结构由递归引入使用时会导致两次,或包括替代进口。
grep -r "struct StructName" *
只显示清晰度的一个发生。
我也搜索过项目中的每个包含语句,并且没有发现包含vs导入,或者其他包含/导入CEFoo.h的明显用途(包含正在定义/导入的结构的文件不止一次)。
我怎样才能进一步追捕的原因呢?我假设我正在导入它两次 - 如果是,有没有办法通过首次定义的冗长或日志来查看它?
任何其他的想法我能做些什么来解决这个?
TIA
这将有助于查看更多CEFoo.h,特别是发生错误的第93行。 – Darren 2012-07-11 06:49:56
此外,您可能希望将'gnustep'标记添加到您将来的问题中,但在这个*特殊*情况下,它可能不相关。 – andyvn22 2012-07-11 07:28:05
@Darren我用第86-92行编辑了代码示例。 TIA – Geremy 2012-07-11 18:16:19