c++ - @class AVPlayerLayer 的预期 unqualified-id

标签 c++ objective-c qt avfoundation objective-c++

在我的 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代码。

框架.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);
};

帧.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);
}

最佳答案

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

您可以转发声明您的 objective-c 类:

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

关于c++ - @class AVPlayerLayer 的预期 unqualified-id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54201329/

相关文章:

c++ - 数组作为函数参数 - 编译错误

c++ - 模板编译错误 - 标准与否?

objective-c - Objective-C下划线的平均值是什么

c++ - Qt 的 MOC 生成的 .cpp 文件中有哪些部分?

c++ - 如何将 std::array 转换为 boost::asio::buffer?

c++ - 如何使用模板结构而不是函数检查容器的类型?

ios - 如何使用私有(private)框架捕获来自 iOS 上其他应用程序的所有推送通知?

iphone - 表格 View 崩溃

c++ - 如何限制QLayout增长?

c++ - QT 布局小部件调整大小