Ожидаемый неквалифицированный идентификатор для @class AVPlayerLayer - PullRequest
0 голосов
/ 15 января 2019

Внутри моего приложения qt я объявил @class AVPlayerLayer в моем заголовочном файле (frame.h), который в исходном файле (frame.mm) включает <AVFoundation/AVFoundation.h>.

Когда я пытаюсь скомпилировать его с помощью qt creator, я получаю следующую ошибку:

Expected unqualified-id for @class AVPlayerLayer
unknown type name 'AVPlayerLayer'

Я пытаюсь переслать объявление класса, так как я хочу, чтобы мой заголовочный файл знал, что он ожидает AVPlayerLayer, который включен в мой .mm файл с AVFoundation, причина, по которой я это делаю, заключается в том, что заголовочные файлы не может содержать Objective-C код.

frame.h:

#include <QObject>
#include <QQuickItem>

typedef struct __CVBuffer *CVBufferRef;
typedef CVBufferRef CVImageBufferRef;
typedef CVImageBufferRef CVOpenGLESTextureRef;
typedef CVOpenGLESTextureRef CVOGLTextureRef;

@class AVPlayerLayer;
//-----------------

class FrameRenderer : public QObject
{
    Q_OBJECT

private:
    CVOGLTextureRef renderLayerToTexture(AVPlayerLayer *layer);

public:
    FrameRenderer(QAbstractVideoSurface *surface, QObject *parent = 0);
};

frame.mm

#include "frame.h"
#import <AVFoundation/AVFoundation.h>

FrameRenderer::FrameRenderer(QObject *parent)
    : QObject(parent)
{
}

CVOGLTextureRef FrameRenderer::renderLayerToTexture(AVPlayerLayer *layer)
{
    size_t dummyWidth = 0, dummyHeight = 0;
    return createCacheTextureFromLayer(layer, dummyWidth, dummyHeight);
}

1 Ответ

0 голосов
/ 15 января 2019

Согласно http://philjordan.eu/article/mixing-objective-c-c++-and-objective-c++

Вы можете объявить свой целевой класс с помощью:

#ifdef __OBJC__
@class AVPlayerLayer;
#else
typedef struct objc_object AVPlayerLayer;
#endif
...