我正在学习一本书(iPhone 3D Programming)中的教程,该教程使用:
- Objective-C 头文件和源文件(文件扩展名分别为 .h、.m),
- Objective-C++ 头文件和源文件(文件扩展名分别为 .h、.mm)
- C++ 头文件和源文件(文件扩展名分别为 .hpp、.mpp)
包含一个成功编译的示例 Xcode 项目。
在我找到示例项目之前,我已经手动输入了书中的代码,但是对于下面详述的文件,我得到了以下编译错误:
- 未知类型名称“虚拟”
- 预期的成员名称或“;” 在声明说明符之后
IRenderingEngine.hpp(Xcode 文件检查器 - 文件类型 = “默认 - C++ 标头”)
...
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 File Inspector - File Type = "Default - C Header")
#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 文件检查器中的预期文件类型,因此应该与构建设置正常工作 - Apple LLVM 编译器 4.2 - 语言 - “编译源为 = 根据文件类型” -这与编译成功的示例项目中的 Build Setting 相同。
由于某些奇怪的原因,在我手动创建的项目中将 Build Setting 更改为“Compile Sources As = Objective-C++”消除了编译错误,并且应用程序按预期运行。
谁能提供一个理由来解释为什么这个设置在看似相同(源代码方面)的项目之间不一致?