gpt4 book ai didi

xcode - 由于 Xcode 不尊重文件类型导致的 Objective-C++ 编译错误

转载 作者:行者123 更新时间:2023-12-01 07:27:07 25 4
gpt4 key购买 nike

我正在学习一本书( iPhone 3D Programming )中的教程,它使用:

  • Objective-C 头文件和源文件(文件扩展名分别为 .h、.m),
  • Objective-C++ 头文件和源文件(文件扩展名分别为 .h、.mm)
  • C++ 头文件和源文件(文件扩展名分别为 .hpp、.mpp)

  • A sample Xcode project包含编译成功。

    在我找到示例项目之前,我已经手动输入了书中的代码,但是对于下面详述的文件,我收到了以下编译错误:
  • 未知类型名称“虚拟”
  • 预期的成员名称或“;”声明说明符后

  • IRenderingEngine.hpp(Xcode 文件检查器 - 文件类型 =“默认 - C++ header ”)
    ...
    struct IRenderingEngine {
    virtual void Initialize(int width, int height) = 0; //2 errors as marked above
    virtual void Render() const = 0; //2 errors as marked above
    virtual void UpdateAnimation(float timeStep) = 0; //2 errors as marked above
    virtual void OnRotate(DeviceOrientation newOrientation) = 0; //2 errors as marked above
    virtual ~IRenderingEngine() {} //2 errors as marked above
    };
    ...
  • 必须使用“struct”标签来引用类型“IRenderingEngine”

  • GLView.h(Xcode 文件检查器 - 文件类型 =“默认 - C 标题”)
    #import "IRenderingEngine.hpp"
    #import <QuartzCore/QuartzCore.h>

    @interface GLView : UIView {
    @private
    EAGLContext* m_context;
    IRenderingEngine* m_renderingEngine; //1 error marked above
    float m_timestamp;
    }

    - (void) drawView:(CADisplayLink*)displayLink;
    - (void) didRotate:(NSNotification*)notification;

    @end

    所有其他文件的文件类型也默认为它们在 Xcode 文件检查器中的预期文件类型,因此应该与build设置一起正常工作 - Apple LLVM 编译器 4.2 - 语言 - “编译源为 = 根据文件类型” -这与成功编译的示例项目中的 Build Setting 相同。

    由于某些奇怪的原因,在我手动创建的项目中将build设置更改为“编译源为 = Objective-C++”消除了编译错误,应用程序按预期运行。

    任何人都可以解释为什么这个设置在看似相同(源代码方面)的项目之间不一致?

    最佳答案

    不编译头文件。头文件被预处理器使用——任何你有 #include 的地方或 #import原始文本的实际文本被视为您已将其复制并粘贴到原始文本中。

    因此,您的文件是否称为 .hpp、.h 或其他任何名称都没有关系。如果 .m 文件导入包含 .hpp 文件的 .h 文件,则 .hpp 代码将作为 .m 文件的一部分进行编译,即作为 Objective-C。

    因此我猜你已经得到了 GLView.m .如果要导入 .hpp 文件,无论是直接还是间接,都需要将其编译为 Objective-C++。一种方法是将其重命名为 .mm,另一种方法是告诉项目不要尝试通过文件扩展名猜测语言类型。

    关于xcode - 由于 Xcode 不尊重文件类型导致的 Objective-C++ 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17982091/

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