微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

传递函数的线程构造函数中的 c++ 错误

如何解决传递函数的线程构造函数中的 c++ 错误

每次从类中调用函数时,我都尝试创建一个线程,但我无法正确传递该函数

文件.h

#include <thread>

class Class
{
public:
    Class(int a);
    void ThreadBase(void (*func));
    int CreateThread(void (*func));
};

文件.cpp

#include <thread>
Class::Class(int a)
{
    /**
     *  ...
     */
}

void Class:ThreadBase(void (*func))
{
    while(1)
    {
        /**
         *  ...
         */
    }
}

int Class:CreateThread(void (*func))
{
    std::thread th(Class::ThreadBase,func);
}

错误

error: reference to non-static member function must be called

解决方法

CreateThread 应该使用函数和函数参数调用 std::thread。

问题出在这里:

int ZEXPORT unzip (dest,destLen,source,sourceLen)
    Bytef *dest;
    uLongf *destLen;
    const Bytef *source;
    uLong sourceLen;
{
    z_stream stream;
    int err;

    stream.next_in = (Bytef*)source;
    stream.avail_in = (uInt)sourceLen;
    /* Check for source > 64K on 16-bit machine: */
    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;

    stream.next_out = dest;
    stream.avail_out = (uInt)*destLen;
    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;

    stream.zalloc = (alloc_func)my_alloc;
    stream.zfree = (free_func)my_free;

    /*err = inflateInit(&stream);*/
    err = inflateInit2(&stream,15 + 16);
    if (err != Z_OK) return err;

    err = inflate(&stream,Z_FINISH);
    if (err != Z_STREAM_END) {
        inflateEnd(&stream);
        return err == Z_OK ? Z_BUF_ERROR : err;
    }
    *destLen = stream.total_out;

    err = inflateEnd(&stream);
    return err;
}

Class::ThreadBase 不是静态函数;所以不能直接调用。在这种情况下; CreateThread 应该调用'this.'的成员函数“ThreadBase”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。