嗨,我试图转发声明cv :: Mat类,但我不能让它工作.它给消息字段'frame'具有不完整的类型.
OpenGlImpl.h
namespace cv {
class Mat;
}
class OpenGLImpl {
private:
cv::Mat frame;
};
Run Code Online (Sandbox Code Playgroud)
我该如何正确地转发声明呢?
我尝试调用非静态函数时遇到访问冲突错误.
我的.h文件看起来像这样.
class World
{
public:
World();
virtual ~World();
static void CALLBACK DispatchCallback(
SIMCONNECT_RECV *pData,
DWORD cbData,
void *pContext
);
void Process(SIMCONNECT_RECV *pData, DWORD cbData);
virtual void frameEvent();
virtual void init();
};
Run Code Online (Sandbox Code Playgroud)
现在在我的.cpp文件中的init()函数我调用一个函数将数据返回给我的回调函数.
SimConnect_CallDispatch(hSimConnect, DispatchCallback, NULL);
Run Code Online (Sandbox Code Playgroud)
将数据发送到DisPatchCallback函数.
在此函数中,以下代码驻留:
void CALLBACK World::DispatchCallback(
SIMCONNECT_RECV *pData,
DWORD cbData,
void *pContext)
{
World *pThis = reinterpret_cast<World*>(pContext);
pThis->Process(pData, cbData);
}
Run Code Online (Sandbox Code Playgroud)
此函数是一个静态函数,它创建一个World对象来调用Process函数.
这可以工作,但它打破了它想要访问frameEvent函数的行.
void World::Process(SIMCONNECT_RECV *pData, DWORD cbData)
{
HRESULT hr;
switch(pData->dwID)
{
case SIMCONNECT_RECV_ID_EVENT_FRAME:
frameEvent(); //it breaks here frameEvent is a …Run Code Online (Sandbox Code Playgroud)