gpt4 book ai didi

c++ - 为什么VC2008认为这个类是抽象的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:24:06 26 4
gpt4 key购买 nike

我正在编写一些代码来使用 DirectShow 处理来自某些摄像头的视频输入,因此我必须实现 ISampleGrabberCB。

我实现接口(interface)的类编译正常,但是当我尝试实例化它时,编译器引发“error C2259: 'SampleGrabberCB': cannot instantiate abstract class”。

这是我正在实现的接口(interface):

interface ISampleGrabberCB : public IUnknown {
virtual STDMETHODIMP SampleCB( double SampleTime, IMediaSample *pSample ) = 0;
virtual STDMETHODIMP BufferCB( double SampleTime, BYTE *pBuffer, long BufferLen ) = 0;
};

这是我的 SampleGrabberCB header :

#pragma once

#include "stdafx.h"

class SampleGrabberCB : public ISampleGrabberCB {
private:

int _refCount;
DShowCaptureDevice* _parent;

public:
// SampleGrabberCB();
SampleGrabberCB(DShowCaptureDevice* parent);
~SampleGrabberCB();

virtual STDMETHODIMP BufferCB(double sampleTime, BYTE* pBuffer, long bufferLen);
virtual STDMETHODIMP SampleCB(double sampleTime, IMediaSample * pSample, long bufferLen);

#pragma region IUnknown

virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppv) {

if( riid == IID_ISampleGrabberCB || riid == IID_IUnknown ) {

*ppv = (void *) static_cast<ISampleGrabberCB*> ( this );
return NOERROR;
}

return E_NOINTERFACE;

}

virtual ULONG STDMETHODCALLTYPE AddRef() {
return ++_refCount;
}

virtual ULONG STDMETHODCALLTYPE Release() {
int n = --_refCount;
if (n &lt;= 0) {
delete this;
}
return n;
}

#pragma endregion
};

这是 SampleGrabberCB.cpp 的实现:

#include "StdAfx.h"
#include "SampleGrabberCB.h"

//SampleGrabberCB::SampleGrabberCB() {
// _parent = NULL;
//}

SampleGrabberCB::SampleGrabberCB(DShowCaptureDevice* parent) {

_parent = parent;
}

SampleGrabberCB::~SampleGrabberCB() {
}

STDMETHODIMP SampleGrabberCB::BufferCB(double sampleTime, BYTE *pBuffer, long bufferLen) {
// dummy value for now
return -50;
}

STDMETHODIMP SampleGrabberCB::SampleCB(double sampleTime, IMediaSample *pSample, long bufferLen) {
// dummy value for now
return 100;
}

下面是我的使用方法:

SampleGrabberCB* callback = new SampleGrabberCB(device);

有什么想法吗?谢谢!

最佳答案

接口(interface)中声明的

SampleCB 没有 SampleGrabberCB 类中存在的第三个参数 (bufferLen)。

关于c++ - 为什么VC2008认为这个类是抽象的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3602682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com