C++ 为什么VC2008认为这个类是抽象的?
我正在编写一些代码来使用DirectShow处理来自一些摄像头的视频输入,所以我必须实现ISampleGrabberCB 实现接口的类可以编译,但当我尝试实例化它时,编译器会引发错误C2259:“SampleGrabberCB”:无法实例化抽象类C++ 为什么VC2008认为这个类是抽象的?,c++,abstract-class,directshow,C++,Abstract Class,Directshow,我正在编写一些代码来使用DirectShow处理来自一些摄像头的视频输入,所以我必须实现ISampleGrabberCB 实现接口的类可以编译,但当我尝试实例化它时,编译器会引发错误C2259:“SampleGrabberCB”:无法实例化抽象类 STDMETHODIMP SampleGrabberCB::SampleCB(double sampleTime, IMediaSample *pSample, long bufferLen) 以下是我正在实现的接口: interface ISamp
STDMETHODIMP SampleGrabberCB::SampleCB(double sampleTime, IMediaSample *pSample, long bufferLen)
以下是我正在实现的接口:
interface ISampleGrabberCB : public IUnknown {
virtual STDMETHODIMP SampleCB( double SampleTime, IMediaSample *pSample ) = 0;
virtual STDMETHODIMP BufferCB( double SampleTime, BYTE *pBuffer, long BufferLen ) = 0;
};
这是我的SampleGrabberCB标题:
#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 <= 0) {
delete this;
}
return n;
}
#pragma endregion
};
以下是我如何使用它:
SampleGrabberCB* callback = new SampleGrabberCB(device);
有什么想法吗?谢谢 接口中声明的SampleCB没有SampleGrabberCB类中存在的第三个参数bufferLen。接口中声明的SampleCB没有SampleGrabberCB类中存在的第三个参数bufferLen。SampleCB方法与基本抽象类中的方法不匹配
STDMETHODIMP SampleGrabberCB::SampleCB(double sampleTime, IMediaSample *pSample, long bufferLen)
对
virtual STDMETHODIMP SampleCB( double SampleTime, IMediaSample *pSample ) = 0;
SampleCB方法与基抽象类中的方法不匹配
STDMETHODIMP SampleGrabberCB::SampleCB(double sampleTime, IMediaSample *pSample, long bufferLen)
对
virtual STDMETHODIMP SampleCB( double SampleTime, IMediaSample *pSample ) = 0;
虚拟STDMETHODIMP SampleCBdouble sampleTime,imedisample*pSample,long bufferLen方法的签名与接口中纯虚拟方法的签名不匹配-您需要删除bufferLen参数。虚拟STDMETHODIMP SampleCBdouble sampleTime,imedisample*pSample,long bufferLen方法与接口中的纯虚拟方法不匹配-您需要删除bufferLen参数。看起来SampleCB方法中的方法签名不同。On case有2个参数和其他3个参数。在SampleCB方法中,方法签名似乎不同。On case有2个参数和其他3个参数。编译器通常会告诉您错误消息其余部分缺少什么。但是编译器没有。这是它给出的唯一错误消息,正如我所说,我的类编译得很好。编译器通常会告诉您错误消息的其余部分缺少什么。但是编译器没有。这是它给出的唯一错误消息,正如我所说,我的类编译得很好。校长谢谢!IDE没有像C或Java那样列出与接口不匹配的方法,这让我很恼火。有没有办法实现这一点,或者这是C++的编译器复杂性所固有的?没问题。我不是C++开发人员,我已经超过七年没有使用VC++了,所以我恐怕无法评论获得这些信息-别人可能能告诉你-我肯定会认为这是输出表。IDE没有像C或Java那样列出与接口不匹配的方法,这让我很恼火。有没有办法实现这一点,或者这是C++的编译器复杂性所固有的?没问题。我不是C++开发人员,我已经超过七年没有使用VC++了,所以我恐怕无法评论获得这些信息-别人可能能告诉你-我肯定会认为这是可以输出的。