在m文件中包含mm文件 我有一个.C++文件,带有C++代码和类声明。我想将它包含在另一个.m文件中,但编译器开始在另一个类中给出错误 未知类型名称“类”;你是说“课堂”吗

在m文件中包含mm文件 我有一个.C++文件,带有C++代码和类声明。我想将它包含在另一个.m文件中,但编译器开始在另一个类中给出错误 未知类型名称“类”;你是说“课堂”吗,c++,objective-c,objective-c++,C++,Objective C,Objective C++,请注意,.m文件已包含在.mm文件中 e、 g A.h A.mm->该类有#包括“B.h” B.h->#当我尝试导入A.h时包含“A.h”会出现错误 B.m->#当我尝试导入A.h时包含“A.h”会出现错误 我曾尝试在.m文件中使用struct,但在实例中没有调用该方法 任何帮助都将不胜感激。你到底想做什么?尝试从源文件中包含源文件是一件非常罕见的事情,并且通常会在程序的体系结构中闻到其他错误的味道 通常,您应该为.m和.mm文件各有一个头文件和一个实现文件。如果您不希望ObjC类声明位于主标头

请注意,.m文件已包含在.mm文件中

e、 g

A.h

A.mm->该类有#包括“B.h”

B.h->#当我尝试导入A.h时包含“A.h”会出现错误

B.m->#当我尝试导入A.h时包含“A.h”会出现错误

我曾尝试在.m文件中使用struct,但在实例中没有调用该方法


任何帮助都将不胜感激。

你到底想做什么?尝试从源文件中包含源文件是一件非常罕见的事情,并且通常会在程序的体系结构中闻到其他错误的味道

通常,您应该为.m和.mm文件各有一个头文件和一个实现文件。如果您不希望ObjC类声明位于主标头中(例如,因为您正在实现一个框架,而此标头是该框架的公共API),那么还可以有多个标头。例如,您可以有一个MyClass.h和一个MyClassPrivate.h,并且只包含第二个

<>你不能从普通Objc中使用C++(Objc++是这样做的),所以在Objc文件中使用.mm的头是不可能的。除非你把它分成Objc部分(你可以使用)和C++部分,例如在几个头。 有关混合纯ObjC和ObjC++的更多信息,请查看我在本线程中的答案:


我也做了一个播客片段,我更详细地讲述了使用C++和Objc的奇怪情况:特别是,确保你对编译单元是100%的坚定的,或者你总是会遇到问题,包括来自C++的Objc头或(OBJ)。从Obj.

C++标题中,在另一个文件中包含M或.mm文件很少有价值。与将a.c包含在常规c中一样——这是在非常特殊的情况下完成的,但是如果您试图在“正常”的情况下完成,那么您就做错了。这就是为什么会有.h文件。(如果您不知道这一点,就不应该使用Objective-C编程——首先学习简单的旧C语言。)。。。ObjuleC也不理解C++,所以这不仅是一种不寻常的技术,而且是浪费时间。如果包含C++,你的M将不能包含.mm的头。你需要做一个只包含Objc的标题,并将C++部分放在.mm或其他文件中。H.不要告诉我们你没有显示代码和错误,你会得到错误。如果你有一个包含C++的项目,你需要使用一个“yIFIFF”来跳过那些非C++模块中的文件。有一个标准的C++定义,你可以测试。