小编Ver*_*ern的帖子

前向声明cv :: Mat

嗨,我试图转发声明cv :: Mat类,但我不能让它工作.它给消息字段'frame'具有不完整的类型.

OpenGlImpl.h

namespace cv {
    class Mat;
}

class OpenGLImpl {

private:
   cv::Mat frame;

};
Run Code Online (Sandbox Code Playgroud)

我该如何正确地转发声明呢?

c++ opencv

3
推荐指数
1
解决办法
2052
查看次数

c ++从静态函数调用非静态函数

我尝试调用非静态函数时遇到访问冲突错误.

我的.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)

c++ windows

2
推荐指数
1
解决办法
694
查看次数

标签 统计

c++ ×2

opencv ×1

windows ×1