调用'connect'(QT)没有匹配的函数。

问题描述 投票:1回答:1

我是一个写QT代码的新手。我写的是一个简单的http客户端代码(Qt版本是 5.9). 我定义了一个类,名为 my_http_client,它得出 Qobject,我用 QNetworkAccessManager 类来创建http连接。我创建了3个文件,一个是 main.cpp,另两个是 my_http_client.hmy_http_client.cpp. 该 my_http_client 文件中定义的类 my_http_client.cpp. 好了,看流水是我的代码。当我编译我的项目时,它出现了错误,我不知道发生了什么,我试图解决它,但我不能。

D:\Documents\code\c++\qt_console\http\http_client\my_http_client.cpp:16: error: no matching function for call to 'my_http_client::connect(QNetworkReply*&, const char*, my_http_client*, const char*)'
    QObject::connect(rep_QNetworkReply, SIGNAL(finished()), this, SLOT(httpFinished()));

我不知道发生了什么,我试图解决它,但我不能。我查看 同样的问题.答案不能解决我的问题,请帮帮我。我是如何纠正这个错误的.谢谢。

my_http_client.h

#ifndef MY_HTTP_CLIENT_H
#define MY_HTTP_CLIENT_H


/*create by victory, time: 2020/05/16
This file define a simple httpclient class,support basic http request
*/

#include <QObject>
#include <QNetworkAccessManager>

QT_BEGIN_NAMESPACE
class QNetworkAccessManager;
class QNetworkReply;
QT_END_NAMESPACE

class my_http_client : public QObject
{
    Q_OBJECT

public:
    explicit my_http_client(QObject *parent = Q_NULLPTR);

    ~my_http_client();      //destructor

public:
    void get(const QUrl &url);


private:
    QNetworkAccessManager *manager;
    QNetworkReply* rep_QNetworkReply;


private slots:
    void httpFinished();
    void httpReadyRead();
};

#endif // MY_HTTP_CLIENT_H

my_http_client.cpp

#include "my_http_client.h"
#include <iostream>


my_http_client::my_http_client(QObject *parent)
    :  QObject(parent)
{
    this->manager = new QNetworkAccessManager(this);
}

//client send get request
void my_http_client::get(const QUrl &url)
{

   this->rep_QNetworkReply = this->manager->get(QNetworkRequest(url));
   connect(rep_QNetworkReply, SIGNAL(finished()), this, SLOT(httpFinished()));

   //connect(rep_QNetworkReply, SIGNAL(readyRead()), this, SLOT(httpReadyRead()));
}

//QNetworkReply send a finished siganl
//function replyFinished recv it and handle it
void my_http_client::httpFinished()
{

    std::cout << "httpFinished:  " << rep_QNetworkReply << std::endl;

    QVariant redirectionTarget = rep_QNetworkReply->attribute(QNetworkRequest::RedirectionTargetAttribute);
    if (rep_QNetworkReply->error())
    {
        std::cerr << "get failed: " << rep_QNetworkReply->errorString() << std::endl;
    }

    rep_QNetworkReply->deleteLater();
    rep_QNetworkReply = Q_NULLPTR;


}



void my_http_client::httpReadyRead()
{
    std::cout << "httpReadyRead: " << std::endl;
    std::cout << rep_QNetworkReply->readAll() << std::endl;

}

my_http_client::~my_http_client()
{
    delete this->manager;
}

main.cpp

#include <QCoreApplication>
#include "my_http_client.h"


/*this is a sample http client, create it by victory*/
/*time is 2020:05:16*/

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    my_http_client pClient;
    pClient.get(QUrl("http://127.0.0.1:8888/index.html"));


    return a.exec();
}

c++ qt compiler-errors qobject
1个回答
1
投票

尝试添加 #include <QNetworkReply>my_http_client.h它为我解决了这个问题。

另外,我建议更换 std 伐木 qDebug()qCritical()#include <QDebug> (在Qt中调试)

© www.soinside.com 2019 - 2024. All rights reserved.