想新建个线程进行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)
离线
已解决,parent这个参数放到最后。
离线