我已经为我的应用程序创建了一个缓存文件操作的结构。在将它放入我当前的项目之前,我在一个单独的项目中构建并测试了它。
自从我将其移除后,Xcode拒绝构建它。除非我没有包含任何基于Objective-C的头文件中的文件。
当我尝试包含iostream时出现一个错误:
当我发表评论时更多:
它的文件扩展名为.mm,但我已经尝试过.cpp和.hpp,但是除非我没有从Objective-C头文件中#include
,否则他们都拒绝构建。
我还尝试了iostream中的#import
和Objective-C头文件中的文件本身。
有关为何发生这种情况的任何线索?
答案 0 :(得分:1)
答案 1 :(得分:1)
原则上,您不能包含来自Objective-C源文件的C ++头文件。
毕竟,#include(或#importing)文件只意味着在将结果传递给“实际”编译器之前,预处理器用#included文件的内容替换#include指令。头文件的文件扩展名是常规问题,但它没有实际意义。
您看到的错误消息显然是文件被编译为[Objective-] C而不是[Objective-] C ++的结果。
解决方案:包含C ++头文件的所有源文件必须是C ++(。cpp或.cc或其他一些扩展)或Objective-C ++(。mm)。包含包含C ++头文件的头文件的所有源文件也必须是C ++或Objective-C ++。
编辑:我刚刚看到你要在C ++文件中定义要包含的非内联非模板函数。这是一个无关的问题,但迟早会导致“多重定义”错误。这些函数定义属于.cpp,它不应该在任何地方获得#included,只有struct / class定义属于头文件。答案 2 :(得分:0)
我怀疑在编译包含相同标头的.m或.c文件时发生错误。