首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><string.h>与我自己的String.h冲突

<string.h>与我自己的String.h冲突
EN

Stack Overflow用户
提问于 2010-06-27 02:43:29
回答 7查看 5K关注 0票数 11

我有一个项目在g++中可以正常编译(我现在看不到版本),但现在在xCode上它不是。

我想我现在有问题了.我的项目中有一个String.h文件,看起来xCode编译器(也就是gcc)正试图从...我不太确定,但看看这张照片

http://www.jode.com.br/Joe/xCode1.png

从它看起来,它包含了我自己的文件,而不是系统文件,我想知道...#include < file >不应该是一个system include吗?因为<>?系统不应该在它自己的路径中包含一个文件而不是我的应用程序的原始路径吗?

正如我所说的,我不确定这是不是正在发生的事情,因为我在过去的两天里刚刚迁移到osx……

我打算更改我的类和文件名以避免冲突,所以它可以工作,如果这真的是问题所在,但我想知道,应该有另一种方法来做到这一点,因为现在我的项目没有那么大,所以我可以在一段时间内做到这一点,但如果项目更大呢?更改所有的包含和类名是很困难的。

任何帮助我们都将不胜感激

谢谢,

乔纳森

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-06-27 13:23:13

使用与string.h等标准标头相同的名称命名标头,并使用#include <String.h>简单地包含它们,这是自找麻烦(在某些平台上,大小写的不同没有区别)。

然而,正如您所说的,在命名您的头文件时,很难提前弄清楚它们是什么。因此,最简单的方法是设置将include路径设置为头所在的子目录之外的一个目录级,例如:

代码语言:javascript
复制
#include <Jonathan/String.h>

现在,您不必担心String.h文件名是否与您正在使用的某个库中的内容冲突,除非它们恰好也包含<Jonathan/String.h> (这是不太可能的)。所有像样的第三方库也是这样做的。例如,我们不在boost中包含<function.hpp>,而是包含<boost/function.hpp>。与GL/GL.h相同,而不是简单的GL.h。这种做法在很大程度上避免了冲突,而且您不必通过将String.h重命名为类似Text.h的名称来解决问题。

票数 5
EN

Stack Overflow用户

发布于 2011-01-27 19:53:04

我也有同样的问题,而且很难解决。我花了几个小时才修好/找出来。问题出在xcode的标题图上。除了避免这些保留名称,通常这是一个好主意,但对于第三方库来说并不总是可行的,解决方案是添加

代码语言:javascript
复制
USE_HEADERMAP = NO

添加到用户定义的设置中。

表扬这些家伙:http://meidell.dk/archives/2010/05/08/xcode-header-map-files/ http://www.cocoabuilder.com/archive/xcode/262586-header-file-problem-sorry-to-bug-this-list.html

票数 11
EN

Stack Overflow用户

发布于 2010-06-27 02:55:17

是的,如果您使用

代码语言:javascript
复制
#include "file"

首先查找本地目录,然后

代码语言:javascript
复制
#include <file>

仅查找系统包含的文件夹。

注意单词first只出现在第一个大小写中。这意味着每次包含时,您的本地版本都不应该到达(除非您已将源路径包含在INCLUDE指令中)。

也就是说,我的建议是用一个明确的名字来重命名你的本地文件...

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3125090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档