QT 中的卷曲"Expected token ')', got '__typeof__'"
CURL "Expected token ')', got '__typeof__'" in QT
我正在开发一个程序,该程序应该在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
在google上搜索了一下之后,我怀疑它可能是某种定义语句,但是在从我的类中删除它们后我找不到解决方案。
这是我下载文件的最后一招了,所以我真的需要让它工作。
编辑:查看编译器输出后,我发现了以下内容。我想这可能会有帮助:
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函数再次工作,而不是愚弄得到这个工作。谢谢你的帮助。诊断此问题的最佳方法可能是进行"仅预处理"编译。我假设您正在使用g++,因此您应该尝试-E
开关并将其输出到文件中。然后看一下文件,看看curl_easy_setopt
行是什么样子的。
UPDATE:对于QT creator,您可以通过更新.pro文件来保存编译过程中创建的临时文件,包括以下选项:
QMAKE_CXXFLAGS += -save-temps
来自GCC文档:
存储常用的" temporary "中间文件永久;的地方它们在当前目录和名称中它们基于源文件。因此,使用' -c -save-temp '编译foo.c会产生文件foo。I和foo。还有食物。这会创建一个预处理foo。I输出文件尽管编译器现在通常使用集成预处理器。
__typeof__
是GCC编译器的扩展,由CURL使用。这意味着GCC将编译CURL代码,但其他c++解析器(如Qt Creator)将被CURL代码阻塞。很烦人,但不重要。
第二个失败"collect2: Id returned 1 exit status"不包含原因;你应该单独引用。我预计的原因是您忘记链接到CURL库,但这只是一个有根据的猜测。
- 尝试在类中编译内核,出现错误"__init__() got an unexpected keyword argument 'kernel'"
- Got empty Qt
- 什么是[Editor(typeof(FolderNameEditor),typeof(UITypeEditor)]的C+
- typeof(x)作为模板参数
- C++模板错误"Undefined reference to"和"Expected a type, got"
- 带外部链接的便携式名称"typeof"
- 不能将typeof(std::endl)作为模板参数
- C++中的Typeof()运算符
- 我在这里没有正确使用typeof()吗?
- 视觉 为什么C++不允许我使用typeof?
- 在 G++ 4.8 中,typeof 仍然不能与 "::" 一起使用
- QT 中的卷曲"Expected token ')', got '__typeof__'"