CURL "Ожидаемый токен"), получил '__typeof__' "в QT - PullRequest
0 голосов
/ 11 апреля 2011

Я разрабатываю программу, которая должна загружать файл с сайта в QT, но поскольку библиотеки QT по умолчанию не работают, я решил вместо этого использовать CURL.Следуя одному из примеров в части документации на их сайте, я создал следующий код:

downloader.h

#ifndef DOWNLOADER_H
#define DOWNLOADER_H

// Curl includes
#include "curl/curl.h"
#include "curl/types.h"
#include "curl/easy.h"

#include <QString>
#include <QObject>

class Downloader : QObject
{
    Q_OBJECT

public:
    Downloader();
    void DownloadFile(QString url, QString directory);

signals:
    void DownloadProgress(int downloaded, int total, QString message);
    void DownloadComplete();

private:
    void downProg(double t, double d, double ultotal, double ulnow);
    void read(void *ptr, size_t size, size_t nmemb, FILE *stream);
    void write(void *ptr, size_t size, size_t nmemb, FILE *stream);
};

#endif // DOWNLOADER_H

downloader.cpp

#include "downloader.h"

// Curl includes
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>

Downloader::Downloader()
{

}

void Downloader::DownloadFile(QString url, QString directory) {
    CURL *curl;
    CURLcode res;
    FILE *outFile;
    //gchar *url = ptr;
    QString outFileName = directory + "/tempDL/minecraft.jar";

    curl = curl_easy_init();
    if (curl) {
        outFile = fopen(outFileName.toLocal8Bit().data(), "w");

        char *urlC = url.toLocal8Bit().data();
        curl_easy_setopt(curl, CURLOPT_URL, urlC);
    }
}

void Downloader::downProg(double t, double d, double ultotal, double ulnow) {

}

void Downloader::read(void *ptr, size_t size, size_t nmemb, FILE *stream) {

}

void Downloader::write(void *ptr, size_t size, size_t nmemb, FILE *stream) {

}

Еще до сборки QT Creator сообщает мне, когда я наводю курсор мыши на строку: curl_easy_setopt(curl, CURLOPT_URL, urlC); следующее: expected token ')' got '__typeof__'

Затем при компиляции программы я получаю collect2: Id returned 1 exit status

После того, как я немного погуглил, у меня возникло подозрение, что это может быть какое-то определенное утверждение, но я не смог найти решение после удаления их из моего класса.

И это мое последнее средство длязагрузчик файлов, поэтому мне действительно нужно сделать эту работу.

Редактировать:

После просмотра вывода компилятора я обнаружил следующее.Я подумал, что это могло бы помочь:

WARNING: Failure to find: Fetcher/http_fetcher.h

WARNING: Failure to find: Fetcher/http_error_codes.h

WARNING: Failure to find: Fetcher/http_fetcher.h

WARNING: Failure to find: Fetcher/http_error_codes.h

И, после комментирования проблемных фрагментов кода, ошибка collect2, кажется, вызвана из-за этой строки кода:

curl = curl_easy_init();

Обновление:

После того, как он дурачился с этим в течение нескольких дней, он только и сделал, что разочаровал меня.Я решил просто попытаться заставить функции QT по умолчанию работать снова вместо того, чтобы дурачиться с тем, чтобы заставить это работать.Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 11 апреля 2011

__typeof__ является расширением компилятора GCC и используется CURL. Это означает, что GCC будет компилировать код CURL, но другие синтаксические анализаторы C ++ (такие как Qt Creator) будут подавляться кодом CURL. Раздражает, но не критично.

Второй сбой «collect2: Id вернул 1 состояние выхода» не включает причину; Вы должны процитировать это отдельно. Причина, по которой я ожидал, заключается в том, что вы забыли связать с библиотекой CURL, но это только обоснованное предположение.

0 голосов
/ 11 апреля 2011

Вероятно, лучший способ диагностировать эту проблему - выполнить компиляцию «только перед обработкой».Я предполагаю, что вы используете G ++, поэтому вы должны попробовать -E и вывести файл.Затем посмотрите на файл и посмотрите, как выглядит строка curl_easy_setopt.

ОБНОВЛЕНИЕ: Для создателя QT вы можете сохранить временные файлы, созданные во время компиляции, обновив свой .proфайл для включения этой опции:

QMAKE_CXXFLAGS += -save-temps

Из документов GCC :

Постоянно храните обычные «временные» промежуточные файлы;Поместите их в текущий каталог и назовите их на основе исходного файла.Таким образом, компиляция foo.c с помощью `-c -save-temps 'приведет к созданию файлов foo.i и foo.s, а также foo.o.Это создает предварительно обработанный выходной файл foo.i, хотя компилятор теперь обычно использует встроенный препроцессор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...