#include<vector>没有这个文件或目录。

10

所以我需要在我的项目中使用向量。我已经将文件扩展名从.m更改为.mm,以便支持Objective-C++。但是,当我尝试执行以下操作时:

#include <vector>

在我的.h文件中,出现了文件或目录找不到的错误。但是如果我将那行代码放在.mm文件中,则该错误不会出现。由于我需要在@interface(在我的.h文件中)中使用向量,所以我该怎么做才能让.h文件找到向量文件呢?

另外,我已经尝试将所有内容编译为Objective-C++,但这并不起作用,因为我正在使用Cocos2d库时出现了一些错误...

3个回答

29

你的.h文件是否被包含在其他.h或.m文件中?

如果是这样,那么你也需要将这些文件(或包含它们的文件等)转换为.mm文件。


把.h和.mm文件合并在一起吗? - Dair
6
不行。这个特定的头文件(比如x.h)自然会被包含在x.mm中,但你可能也会在其他模块中使用x类型的对象,比如y。因此,y.h将包含“#include x.h”这一行。现在,当编译器编译y.m时,它不会期望C++代码,因此当它遇到x.h的“include <vector>”时,就会抱怨。因此,即使您没有在y.mm中使用任何C++代码,y.m也必须重命名为y.mm。最后,y.h可能会包含在z.h中,你必须将z.m转换为z.mm等。所以如果可以的话,在mm文件中包含向量会更容易一些。 - mackworth
如果在Swift项目中遇到相同的问题,该怎么办?需要在.swift文件中使用~ x.h,但是遇到了“#include<vector> no such file or directory”的问题。有什么解决方法吗? - hpDev_iOS
我曾经遇到过同样的问题。我创建了一个包装器.mm文件,然后能够在{project}-Bridging-Header.h中导入它。在我的包装器文件中,我导入了一个包含#include<vector>的.h文件。 - Arijan
对于Swift开发者来说,不行;你不能从Swift中使用ObjC++头文件。你需要创建一个仅限ObjC的头文件(因此将你的vector.h或其他c++文件包含在相关的.mm文件中)。 - mackworth

8

不需要将任何.m文件更改为.mm或类似的内容,如果您点击项目,然后点击目标->构建设置一直到"LLVM GCC 4.2 - Languages",您会看到编译源代码为,将该值更改为Objective-C++;


0

我无法升级到Xcode 11.1,所以我删除了Xcode 11.0,然后下载了Xcode 11.1。Xcode 11.1在我重启后工作正常,但在默认的“hello world”命令行C++程序中出现了上述消息。

我的解决方案是: 退出Xcode, 清空垃圾箱, 启动Xcode


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接