您尚未登录。

楼主 #1 2020-05-09 16:28:32

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,199
积分: 1139.5

请教,自定义了一个带参数的QThread类,编译时报错。

想新建个线程进行cansocket接收,所以自定义了一个带参数的继承自QThread的类:

#ifndef CAN_RECV_THREAD_H
#define CAN_RECV_THREAD_H

#include <QThread>

class CanRecvThread : public QThread
{
    Q_OBJECT

public:
    CanRecvThread(QObject *parent = 0, int socket = 0);

    bool canRunFlag = true;
    int* canSocke;

protected:
    void run();

signals:
    void canRecevied();
};

#endif

在其他.cpp里是这样建立这个类的对象的:

        canSocket = socket(PF_CAN, SOCK_RAW, CAN_RAW);
        if(canSocket < 0)
        {
            qDebug() << "open can failed." << endl;
            return;
        }
        canRecvThread = new CanRecvThread(this, canSocket);

编译时报错:

hread.o ../canrecvthread.cpp
../canrecvthread.cpp: 在构造函数‘CanRecvThread::CanRecvThread(QObject*, int)’中:
../canrecvthread.cpp:7:78: 错误:类‘CanRecvThread’没有名为‘canSocket’的字段
 CanRecvThread::CanRecvThread(QObject *parent, int socket) : QThread(parent), canSocket(socket)
                                                                              ^
../canrecvthread.cpp: 在成员函数‘virtual void CanRecvThread::run()’中:
../canrecvthread.cpp:19:37: 警告:在有符号和无符号整数表达式间比较 [-Wsign-compare]
         while(ret1 < sizeof(Rx_frame))
                                     ^
../canrecvthread.cpp:21:24: 错误:‘canSocket’在此作用域中尚未声明
             ret = read(canSocket, &Rx_frame, sizeof(Rx_frame));
                        ^
Makefile:960: recipe for target 'canrecvthread.o' failed
make: *** [canrecvthread.o] Error 1

--------------------------------

晕,打错字了...
int socket打成int *socke了。

那么,如果构造函数有两个参数,比如这个:
CanRecvThread(QObject *parent = 0, int socket = 0);

那么我建立对象时,能否省掉第一个参数?如果能的话,该怎么省?

----------------------------

qt自定义的类的构造函数,都要有*parent这个参数吗?必须放到第一个参数位置吗?如果是的话,那么我给他设了默认值,其他参数也得设默认值了...

最近编辑记录 Gentlepig (2020-05-09 17:20:28)

离线

楼主 #2 2020-05-15 14:48:43

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,199
积分: 1139.5

Re: 请教,自定义了一个带参数的QThread类,编译时报错。

已解决,parent这个参数放到最后。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn