在我的 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/