Итак, я прохожу первый урок в книге О'Рейли по 3D-программированию для iPhone.На этом этапе учебного курса все компоненты OpenGL ES помещаются в отдельный интерфейс C ++.Насколько я могу судить, я следовал за книгой к букве, но все же не могу понять эту ошибку компилятора.Я довольно новичок в C ++ (в основном это C # в прошлом), поэтому я уверен, что это глупо.
Ниже приведено текущее состояние всех соответствующих файлов.
У меня есть файл заголовка c ++ с именем IRenderingEngine.hpp со следующим содержимым:
enum DeviceOrientation {
Unknown,
Portrait,
PortraitUpsideDown,
LandscapeLeft,
LandscapeRight,
FaceUp,
FaceDown,
};
struct IRenderingEngine* CreateRenderer1();
struct IRenderingEngine {
virtual void Initialize(int width, int height) = 0; //Compiler error "expected specifier-qualifier-list before 'virtual'
virtual void Render() const = 0;
virtual void UpdateAnimation(float timeStep) = 0;
virtual void OnRotate(DeviceOrientation newOrientation) = 0;
virtual ~IRenderingEngine() {}
};
У меня есть файл заголовка target-c / c ++ с именем GLView.h , который выглядит следующим образом:
#import "IRenderingEngine.hpp"
#import <OpenGLES/EAGL.h>
#import <QuartzCore/QuartzCore.h>
@interface GLView : UIView {
EAGLContext* m_context;
IRenderingEngine* m_renderingEngine; //Compiler error: Expected specifier-qualifier-list before "IRenderingEngine"
float m_timeStamp;
}
- (void) drawView: (CADisplayLink*) displayLink;
- (void) didRotate: (NSNotification*) notification;
@end
И, наконец, GLView.mm файл с реализацией barebones:
#import "GLView.h"
@implementation GLView
+ (Class) layerClass
{
return [CAEAGLLayer class];
}
- (id)initWithFrame:(CGRect)frame {
return self;
}
- (void) drawView:(CADisplayLink *)displayLink
{
}
-(void) didRotate:(NSNotification *)notification
{
}
@end