gpt4 book ai didi

c++ - LLVM 拒绝编译 C++ 源代码,奇怪的错误

转载 作者:行者123 更新时间:2023-11-30 04:30:47 25 4
gpt4 key购买 nike

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

自从我把它移过来后,Xcode 就拒绝构建它。除非我不包含任何基于 Objective-C 的头文件中的文件。

当我尝试包含 iostream 时出现一个错误: enter image description here

当我注释掉它时还有更多: enter image description here

它的文件扩展名是 .mm,但是我已经用 .cpp 和 .hpp 尝试过,但它们都拒绝构建,除非我不从 Objective-C header 中#include文件。

我还尝试了来自 iostream 的 #import 和 Objective-C 头文件中的文件本身。

关于为什么会发生这种情况的任何线索?

最佳答案

原则上,您不能从 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,只有结构/类定义属于 header 。

关于c++ - LLVM 拒绝编译 C++ 源代码,奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8474548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com