C++ LLVM拒绝编译C++;来源,奇怪的错误

C++ LLVM拒绝编译C++;来源,奇怪的错误,c++,objective-c,compiler-errors,llvm,C++,Objective C,Compiler Errors,Llvm,我制作了一个结构,它为我的应用程序执行缓存文件操作。在将其放入当前项目之前,我在一个单独的项目中构建并测试了 自从我移动了它,Xcode就拒绝构建它。除非我不包括任何基于Objective-C的头文件中的文件 当我尝试包含iostream时,出现一个错误: 当我把它评论出来时,还有更多: 它的文件扩展名是.mm,但是我尝试了.cpp和.hpp,但是它们都拒绝构建,除非我不从Objective-C头文件中包含它 我还尝试了从iostream和Objective-C头文件中的文件本身导入#imp

我制作了一个结构,它为我的应用程序执行缓存文件操作。在将其放入当前项目之前,我在一个单独的项目中构建并测试了

自从我移动了它,Xcode就拒绝构建它。除非我不包括任何基于Objective-C的头文件中的文件

当我尝试包含iostream时,出现一个错误:

当我把它评论出来时,还有更多:

它的文件扩展名是.mm,但是我尝试了.cpp和.hpp,但是它们都拒绝构建,除非我不从Objective-C头文件中包含它

我还尝试了从iostream和Objective-C头文件中的文件本身导入
#import


关于为什么会发生这种情况,有什么线索吗?

我怀疑在编译包含相同头的.m或.c文件时发生了错误。

请看一看。您需要告诉编译器包含libstdc++。当Objy-C和C++混合时,所有的文件都需要有“.mm”扩展,如第二个链接所示。

作为原则问题,不能从ObjtoE-C源文件中包含C++头文件。 毕竟,包含(或导入)文件只意味着预处理器在将结果传递给“实际”编译器之前,用包含文件的内容替换包含指令。头文件的文件扩展名是惯例问题,只是它没有实际意义

您看到的错误消息显然是将文件编译为[Objective-]C而不是[Objective-]C++的结果

解决方案:所有包含C++头文件的源文件必须是C++(.CPP或.cc或其他一些扩展)或Objul-C++(.mm)。所有包含头文件的源文件,包括C++头文件,也必须是C++或Objul-C++。


<>编辑:我刚才看到你在你的C++文件中定义了非内联的非模板函数。这是一个无关的问题,但迟早会导致“多重定义”错误。这些函数定义属于.CPP,不应该包含在任何地方,只有结构/类定义属于一个头。

边注:因为你使用C++,去掉了C-ISM<代码> TyBuffFrxt{}…MyType;
并将其替换为
struct mytype{…}。而且,我看到了很多裸体指针的方法。在C++中,现代资源管理看起来不同。谢谢您的评论,并将所有的文件扩展名改为Objto-C++,并使函数内联。它现在工作得很好。