在我的qt应用程序中,我在头文件(frame.h)中声明了一个@class AVPlayerLayer,它在源文件(frame.mm)中包含<AVFoundation/AVFoundation.h>。
当我尝试用qt creator编译它时,我得到了以下错误:
Expected unqualified-id for @class AVPlayerLayer
unknown type name 'AVPlayerLayer'我试图转发类声明,因为我想让我的头文件知道包含在我的AVFoundation .mm文件中的AVPlayerLayer,我这样做的原因是因为头文件不能包含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);
}发布于 2019-01-15 23:31:58
根据http://philjordan.eu/article/mixing-objective-c-c++-and-objective-c++的说法
您可以使用以下命令转发声明您的目标c类:
#ifdef __OBJC__
@class AVPlayerLayer;
#else
typedef struct objc_object AVPlayerLayer;
#endifhttps://stackoverflow.com/questions/54201329
复制相似问题