Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.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
Ios 这是什么;重新定义';集团'&引用;错误?_Ios_Ios7.1_Xcode5.1 - Fatal编程技术网

Ios 这是什么;重新定义';集团'&引用;错误?

Ios 这是什么;重新定义';集团'&引用;错误?,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是处理用户权

我在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
是处理用户权限的低级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?)更多的头文件,包括导致