首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@class AVPlayerLayer需要未限定的id

@class AVPlayerLayer需要未限定的id
EN

Stack Overflow用户
提问于 2019-01-15 22:53:23
回答 1查看 403关注 0票数 1

在我的qt应用程序中,我在头文件(frame.h)中声明了一个@class AVPlayerLayer,它在源文件(frame.mm)中包含<AVFoundation/AVFoundation.h>

当我尝试用qt creator编译它时,我得到了以下错误:

代码语言:javascript
复制
Expected unqualified-id for @class AVPlayerLayer
unknown type name 'AVPlayerLayer'

我试图转发类声明,因为我想让我的头文件知道包含在我的AVFoundation .mm文件中的AVPlayerLayer,我这样做的原因是因为头文件不能包含Objective-C代码。

frame.h:

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-15 23:31:58

根据http://philjordan.eu/article/mixing-objective-c-c++-and-objective-c++的说法

您可以使用以下命令转发声明您的目标c类:

代码语言:javascript
复制
#ifdef __OBJC__
@class AVPlayerLayer;
#else
typedef struct objc_object AVPlayerLayer;
#endif
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54201329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档