提问 :c++报错 :error: no matching function for call

qt程序在终端中编译出现的问题,各位大佬,请问这怎么解决呢???

clientthread.cpp: In member function ‘void ClientThread::deng_send_work1()’:
clientthread.cpp:360:64: error: no matching function for call to ‘QTimer::singleShot(int, ClientThread*, ClientThread::deng_send_work1()::<lambda()>)’
     QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
                                                                ^
In file included from /usr/include/qt4/QtCore/QTimer:1:0,
                 from clientthread.h:7,
                 from clientthread.cpp:1:
/usr/include/qt4/QtCore/qtimer.h:78:17: note: candidate: static void QTimer::singleShot(int, QObject*, const char*)
     static void singleShot(int msec, QObject *receiver, const char *member);
                 ^
/usr/include/qt4/QtCore/qtimer.h:78:17: note:   no known conversion for argument 3 from ‘ClientThread::deng_send_work1()::<lambda()>’ to ‘const char*’
 

这种情况建议把代码贴出来吧。

我猜测是不是slot写法有问题,看起来在终端里是qt4

QTimer::singleShot(time, this, &deng_send_work1);

改成

QTimer::singleShot(time, this, SLOT(deng_send_work1()));

编译器版本5+,在qt中运行没有问题,但是在终端中就出现问题了

 

#include "clientthread.h"
#include <QDebug>
#include <QThread>
#include <QMessageBox>

extern bool Flag_shan;
extern bool Flag_deng_bed,Flag_fu_bed_deng;
extern bool flag_deng;
extern bool flag_men;
extern bool flag_chuang;
extern bool flag_yanwu,flag_reshuiqi;
extern bool flag_chuanglian;
extern QString cl_zhuangtai;
extern QString wendu,shidu;
extern bool flag_all,flag_bing;

ClientThread::ClientThread(QObject *parent) : QObject(parent)
{

}

void ClientThread::client_work()
{
    qDebug()<<"tcp00线程"<<QThread::currentThreadId();
    myClient=new QTcpSocket(this);
    servIp ="39.97.254.40" ;
    servPort = "8890";
    this->client_bing();


}

void ClientThread::client_bing()
{


    myClient->connectToHost(QHostAddress(servIp),servPort.toUInt());
    connect(myClient,SIGNAL(connected()),
            this,SLOT(doProcessConnected()));
    connect(myClient,SIGNAL(readyRead()),
            this,SLOT(doProcessReadyRead()));
    connect(myClient,SIGNAL(disconnected()),
            this,SLOT(doProcessDisconnected()));
    connect(myClient,SIGNAL(error(QAbstractSocket::SocketError)),
            this,SLOT(doProcessError(QAbstractSocket::SocketError)));


}

void ClientThread::doProcessConnected()
{
    flag_bing=true;
    QString msg=QString("连接服务器成功");
    qDebug()<<msg;
    qDebug()<<"++++++++++++++++++++++";
    m_timer0 = new QTimer(this);
    connect(m_timer0,SIGNAL(timeout()),this,SLOT(client_send()));
    m_timer0->start(500);

}

void ClientThread::doProcessReadyRead()
{

    QString msg,msg1,str_read;
    QStringList str_list;
    str_read.clear();
    str_list.clear();
    msg1 = QString("服务器 [%1:%2] 说:")
            .arg(myClient->peerAddress().toString())
            .arg(myClient->peerPort());
    while (!myClient->atEnd()) {
        str_read.append(QString(myClient->readAll()));
    }
    msg=QString("%1%2").arg(msg1).arg(str_read);
  //  qDebug()<<msg;
    str_read.replace("\n","");
    str_read.replace("\r","");
    str_list=str_read.split("#");   //灯#主卧灯#客房灯#阳台窗#窗帘#门#风扇#热水器#温度#湿度#烟雾浓度
                                   // 0---1-----2-----3-----4--5---6----7----8----9----10

    wendu=str_list[8];
    emit wendu_00();
    shidu=str_list[9];
    emit shidu_00();
    if(str_list[10]=="0")
        this->thread_work_yanwu_0();
    if(str_list[10]=="1")
        this->thread_work_yanwu_1();

    if(!flag_all)
    {
        if(str_list[0]=="0")
            this->thread_work00();
        if(str_list[0]=="1")
            this->thread_work01();
        if(str_list[1]=="0")
            this->thread_work10();
        if(str_list[1]=="1")
            this->thread_work11();
        if(str_list[2]=="0")
            this->thread_work20();
        if(str_list[2]=="1")
            this->thread_work21();
        if(str_list[3]=="0")
            this->thread_work30();
        if(str_list[3]=="1")
            this->thread_work31();
        if(str_list[4]=="0")
            this->thread_work40();
        if(str_list[4]=="1")
            this->thread_work41();
        if(str_list[5]=="0")
            this->thread_work50();
        if(str_list[5]=="1")
            this->thread_work51();
        if(str_list[6]=="0")
            this->thread_work60();
        if(str_list[6]=="1")
            this->thread_work61();
        if(str_list[7]=="0")
            this->thread_work70();
        if(str_list[7]=="1")
            this->thread_work71();
    }



}

void ClientThread::doProcessDisconnected()
{

    QString msg="服务期退出!";
    qDebug()<<msg;
    QMessageBox::StandardButton rb = QMessageBox::warning(NULL,"警告!","服务器已退出,是否重连?",QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
    if(rb==QMessageBox::Yes)
    {
        myClient->connectToHost(QHostAddress(servIp),servPort.toUInt());
    }


}

void ClientThread::doProcessError(QAbstractSocket::SocketError)
{

    QString msg ="服务器连接错误,可能网络问题或这服务器没开!";
    qDebug()<<msg;
    QMessageBox::StandardButton rb = QMessageBox::warning(NULL,"警告!","服务器连接错误,是否重连?",
                                            QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
    if(rb==QMessageBox::Yes)
    {
       // this->client_bing();
        myClient->connectToHost(QHostAddress(servIp),servPort.toUInt());
    }

}

void ClientThread::client_send()
{
    QString str="iHome_All";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;

}

void ClientThread::thread_work00()
{
    if(flag_deng)
    {
        flag_deng=false;
        emit deng_00();
    }
}

void ClientThread::thread_work01()
{
    if(!flag_deng)
    {
        flag_deng=true;
        emit deng_00();
    }
}

void ClientThread::thread_work10()
{
    if(Flag_deng_bed)
    {
        Flag_deng_bed=false;
        emit deng_bed_00();
    }
}

void ClientThread::thread_work11()
{
    if(!Flag_deng_bed)
    {
        Flag_deng_bed=true;
        emit deng_bed_00();
    }
}

void ClientThread::thread_work20()
{
    if(Flag_fu_bed_deng)
    {
        Flag_fu_bed_deng=false;
        emit fu_bed_deng_00();
    }
}

void ClientThread::thread_work21()
{
    if(!Flag_fu_bed_deng)
    {
        Flag_fu_bed_deng=true;
        emit fu_bed_deng_00();
    }
}

void ClientThread::thread_work30()
{
    if(flag_chuang)
    {
        flag_chuang=false;
        emit chuang_00();
    }
}

void ClientThread::thread_work31()
{
    if(!flag_chuang)
    {
        flag_chuang=true;
        emit chuang_00();
    }
}

void ClientThread::thread_work40()
{
    if(flag_chuanglian)
    {
        flag_chuanglian=false;
        cl_zhuangtai="窗帘已关!";
        emit chuanglian_00();
    }

}

void ClientThread::thread_work41()
{
    if(!flag_chuanglian)
    {
        flag_chuanglian=true;
        cl_zhuangtai="窗帘已开";
        emit chuanglian_00();
    }

}

void ClientThread::thread_work50()
{
    if(flag_men)
    {
        flag_men=false;
        emit men_00();
    }
}

void ClientThread::thread_work51()
{
    if(!flag_men)
    {
        flag_men=true;
        emit men_00();
    }
}



void ClientThread::thread_work60()
{
    if(Flag_shan)
    {
        Flag_shan=false;
        emit shan_00();
    }
}

void ClientThread::thread_work61()
{
    if(!Flag_shan)
    {
        Flag_shan=true;
        emit shan_00();
    }
}

void ClientThread::thread_work70()
{
    if(flag_reshuiqi)
    {
        flag_reshuiqi=false;
        emit reshuiqi_00();
    }
}

void ClientThread::thread_work71()
{
    if(!flag_reshuiqi)
    {
        flag_reshuiqi=true;
        emit reshuiqi_00();
    }
}

void ClientThread::thread_work_yanwu_0()
{
    if(flag_yanwu)
    {
        flag_yanwu=false;
        emit yanwu_00();
    }
}

void ClientThread::thread_work_yanwu_1()
{
    if(!flag_yanwu)
    {
        flag_yanwu=true;
        emit yanwu_00();
    }
}

void ClientThread::deng_send_work0()
{
    m_timer0->stop();
    QString str="iHome_ctrl#light_0";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    qDebug()<<"++++++++++++++++++++++";
    flag_all=false;

}

void ClientThread::deng_send_work1()
{
    m_timer0->stop();
    QString str="iHome_ctrl#light_1";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    qDebug()<<"++++++++++++++++++++++";
    flag_all=false;
}

void ClientThread::bed_deng_send_work0()
{
    m_timer0->stop();
    QString str="iHome_ctrl#light1_0";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    qDebug()<<"++++++++++++++++++++++";
    flag_all=false;
}

void ClientThread::bed_deng_send_work1()
{
    m_timer0->stop();
    QString str="iHome_ctrl#light1_1";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    flag_all=false;
}

void ClientThread::fu_bed_deng_send_work0()
{
    m_timer0->stop();
    QString str="iHome_ctrl#light2_0";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    flag_all=false;
}
void ClientThread::fu_bed_deng_send_work1()
{
    m_timer0->stop();
    QString str="iHome_ctrl#light2_1";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    flag_all=false;
}

void ClientThread::chuang_send_work0()
{
    m_timer0->stop();
    QString str="iHome_ctrl#window_0";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    flag_all=false;
}

void ClientThread::chuang_send_work1()
{
    m_timer0->stop();
    QString str="iHome_ctrl#window_1";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    flag_all=false;
}

void ClientThread::chuanglian_send_work0()
{
    m_timer0->stop();
    QString str="iHome_ctrl#lian_0";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    flag_all=false;
}

void ClientThread::chuanglian_send_work1()
{
    m_timer0->stop();
    QString str="iHome_ctrl#lian_1";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    flag_all=false;
}

void ClientThread::men_send_work0()
{
    m_timer0->stop();
    QString str="iHome_ctrl#door_0";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    flag_all=false;
}

void ClientThread::men_send_work1()
{
    m_timer0->stop();
    QString str="iHome_ctrl#door_1";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    flag_all=false;
}

void ClientThread::shan_send_work0()
{
    m_timer0->stop();
    QString str="iHome_ctrl#fun_0";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    flag_all=false;
}

void ClientThread::shan_send_work1()
{
    m_timer0->stop();
    QString str="iHome_ctrl#fun_1";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    flag_all=false;
}

void ClientThread::reshuiqi_send_work0()
{
    m_timer0->stop();
    QString str="iHome_ctrl#water_0";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    flag_all=false;
}

void ClientThread::reshuiqi_send_work1()
{
    m_timer0->stop();
    QString str="iHome_ctrl#water_1";
    str.append("\r\n");
    int ret=myClient->write(str.toStdString().c_str());
    if(ret<=0)
        return;
    QTimer::singleShot(5*1000,this,[=](){m_timer0->start(500);});
    flag_all=false;
}

 

 

 

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632