私は本(iPhone 3D Programming)のチュートリアルに従っています:
- Objective-C ヘッダーおよびソース ファイル (ファイル拡張子はそれぞれ .h、.m -)、
- Objective-C++ のヘッダー ファイルとソース ファイル (ファイル拡張子はそれぞれ .h、.mm)
- C++ ヘッダーとソース ファイル (ファイル拡張子はそれぞれ .hpp、.mpp -)
正常にコンパイルされるサンプル Xcode プロジェクトが含まれています。
サンプル プロジェクトを見つける前に、本からコードを手動で入力しましたが、以下に詳述するファイルに対して次のコンパイル エラーが発生していました。
- 不明なタイプ名「仮想」
- 予期されるメンバー名または ';' 宣言指定子の後
IRenderingEngine.hpp (Xcode File Inspector - File Type = "Default - 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
};
...
- タイプ「IRenderingEngine」を参照するには、「struct」タグを使用する必要があります
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 File Inspector で想定されるファイル タイプにデフォルト設定されているため、ビルド設定で正しく動作するはずでした - Apple LLVM コンパイラ 4.2 - 言語 - 「コンパイル ソース = ファイル タイプに従って」 -これは、正常にコンパイルされるサンプル プロジェクトのビルド設定と同じです。
なんらかの奇妙な理由で、手動で作成したプロジェクトでビルド設定を「Compile Sources As = Objective-C++」に変更すると、コンパイル エラーが削除され、アプリケーションが期待どおりに実行されました。
一見同一の (ソースコードに関して) プロジェクト間でこの設定が一貫していない理由について、誰かが理由を提供できますか?