Ios 这是什么;重新定义';集团'&引用;错误?
我在Xcode 5.1香草单视图项目中添加了两个文件: 表hIos 这是什么;重新定义';集团'&引用;错误?,ios,ios7.1,xcode5.1,Ios,Ios7.1,Xcode5.1,我在Xcode 5.1香草单视图项目中添加了两个文件: 表h struct group { int size; }; 表c #include "table.h" 得到了这个错误: Semantic issue table.h:2:8: Redefinition of 'group' “以前的定义”是: 我想知道为什么这个grp.h会自动包含在我的项目中。我怎么能不包括它呢?grp.h是一个标准的Unix级文件,它定义了一些基本数据结构;在本例中,struct group是处理用户权
struct group {
int size;
};
表c
#include "table.h"
得到了这个错误:
Semantic issue
table.h:2:8: Redefinition of 'group'
“以前的定义”是:
我想知道为什么这个
grp.h
会自动包含在我的项目中。我怎么能不包括它呢?grp.h
是一个标准的Unix级文件,它定义了一些基本数据结构;在本例中,struct group
是处理用户权限的低级C函数返回的内容
至于为什么要包含在项目中的问题:当您在Xcode中创建新项目时,它会创建一个包含文件,隐式地包含在项目中的每个.m
或.c
文件中。在我刚刚创建的项目中,它位于名为支持文件
的组的文件浏览器中,名为[project]-Prefix.pch
。矿山有以下内容:
#import <Availability.h>
#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
#导入
#ifndef\uuu IPHONE\u5\u0
#警告“此项目使用仅在iOS SDK 5.0及更高版本中可用的功能。”
#恩迪夫
#ifdef__OBJC__
#进口
#进口
#恩迪夫
倒数第二行,#import
,然后包括所有内置的Objective-C对象,如NSObject
,NSArray
,以及一系列与文件系统一起工作的东西,因此需要能够处理权限和组成员资格。其中之一就是包含grp.h
因此,回到您的问题-您可以将.pch
文件更改为不包含Foundation/Foundation.h
,然后手动将其包含在需要的任何位置
但这最终会减慢所有构建的速度。这里的.pch
文件是特殊的;Xcode将它编译一次并以二进制格式保存,因此它不必解析它为您构建的每个文件扩展的数千行C代码
我的建议?给你的结构起个别的名字。
grp.h
是一个标准的Unix级文件,它定义了一些基本的数据结构;在本例中,struct group
是处理用户权限的低级C函数返回的内容
至于为什么要包含在项目中的问题:当您在Xcode中创建新项目时,它会创建一个包含文件,隐式地包含在项目中的每个.m
或.c
文件中。在我刚刚创建的项目中,它位于名为支持文件
的组的文件浏览器中,名为[project]-Prefix.pch
。矿山有以下内容:
#import <Availability.h>
#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
#导入
#ifndef\uuu IPHONE\u5\u0
#警告“此项目使用仅在iOS SDK 5.0及更高版本中可用的功能。”
#恩迪夫
#ifdef__OBJC__
#进口
#进口
#恩迪夫
倒数第二行,#import
,然后包括所有内置的Objective-C对象,如NSObject
,NSArray
,以及一系列与文件系统一起工作的东西,因此需要能够处理权限和组成员资格。其中之一就是包含grp.h
因此,回到您的问题-您可以将.pch
文件更改为不包含Foundation/Foundation.h
,然后手动将其包含在需要的任何位置
但这最终会减慢所有构建的速度。这里的.pch
文件是特殊的;Xcode将它编译一次并以二进制格式保存,因此它不必解析它为您构建的每个文件扩展的数千行C代码
我的建议?将您的结构命名为其他名称。grp.h已经声明了一个名为“group”的结构, 所以你只需要重命名你的“组”结构,一切都会好起来的。
(例如“my_group”)grp.h已经声明了一个名为“group”的结构, 所以你只需要重命名你的“组”结构,一切都会好起来的。
(例如“my_group”)通常,更改结构的命名会更容易,但由于它来自另一个库,下面是我为您提供的解决方案 事实证明,如果允许.pch文件包含iOS 7.1>/usr/include中的任何头文件,那么它将引用(include?)更多的头文件,包括导致项目出现问题的grp.h 例如,如果.pch文件包含以下内容:
#import <Availability.h>
#导入
那么grp.h将导致冲突
如果您注释掉这一行(并且不包括“iOS 7.1>usr/include”中的任何其他标题),那么您的项目将编译
作为测试,您可以注释掉
并添加#import
,结果将是相同的(尽管cpio.h非常小,并且不引用任何其他头文件)
我不太擅长理解编译的内部结构,所以我无法解释为什么会发生这种情况,但我将问题追溯到了这个文件:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/usr/include/module.map
似乎将各种达尔文头文件组合在一起
iOS 7.0和iOS 7.1都有这个文件,而iOS 6.0没有(这也许可以解释为什么相同的代码在早期的iOS版本上工作)
好消息是,尽管您需要从*.pch文件中删除/usr/include头,但您仍然可以将它们包含在实际需要它们的文件中,并且不会中断编译。这可能是因为,尽管grp.h最终将包含在这些文件中,但它不会包含在表中。c通常情况下,更改结构的命名会更容易,但由于它来自另一个库,下面是我为您提供的解决方案 事实证明,如果允许.pch文件包含iOS 7.1>/usr/include中的任何头文件,那么它将引用(include?)更多的头文件,包括导致