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

Jon*_*han 8 c++ string xcode conflict header

我有一个项目在g ++中编译好(我现在看不到版本),而现在在xCode上则没有.
我认为我现在遇到了问题...我的项目中有一个String.h文件,似乎xCode编译器(即gcc)试图从<cstring>添加我自己的字符串文件...我我不确定,但看看这张图片
http://www.jode.com.br/Joe/xCode1.png

从它看起来像它,它包括我自己而不是系统文件,我想知道...不应该#include <file>是一个系统包括?因为<>?并且系统不应该在其自己的路径中包含文件而不是我的应用程序的原始路径?
正如我所说的,我不确定这是不是发生了什么,因为我过去两天只是迁移到osx ......
我打算将我的类和文件名更改为不冲突,所以它会起作用,如果这是真的问题,但我想知道,应该有另一种方法来做到这一点,因为现在我的项目不是那么大所以我可以在一段时间内做到这一点,但如果项目更大呢?改变所有包含和类名是很困难的......

任何帮助表示赞赏

谢谢,
乔纳森

did*_*ito 8

我有同样的问题,很难解决.花了我几个小时来修理/找出答案.问题是xcode的头图.和解决方案 - 除了避免那些保留名称,这是一个好主意,但并不总是可能与第三方库 - 是添加

USE_HEADERMAP = NO
Run Code Online (Sandbox Code Playgroud)

到您的用户定义的设置.

对这些人的称赞:http : //meidell.dk/archives/2010/05/08/xcode-header-map-files/ http://www.cocoabuilder.com/archive/xcode/262586-header-file-problem -抱歉对bug的这个-list.html


sti*_*472 5

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

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

#include <Jonathan/String.h>
Run Code Online (Sandbox Code Playgroud)

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

  • 当然,如果您的名字不是乔纳森,请适当调整此答案。 (2认同)