C++ 错误C2061:语法错误:标识符';acosf&x27;使用cURL时

C++ 错误C2061:语法错误:标识符';acosf&x27;使用cURL时,c++,c,curl,C++,C,Curl,我试图学习cURL,并在网上找到了一些我想在visualstudio中编译的代码,但我遇到了一系列奇怪的错误。我尝试用谷歌搜索错误,但找不到任何与我的问题相关的错误。我安装了cURL库,但当我尝试运行此程序时: #include <curl/curl.h> #include <fstream> #include <sstream> #include <iostream> // callback function writes data to a

我试图学习cURL,并在网上找到了一些我想在visualstudio中编译的代码,但我遇到了一系列奇怪的错误。我尝试用谷歌搜索错误,但找不到任何与我的问题相关的错误。我安装了cURL库,但当我尝试运行此程序时:

#include <curl/curl.h>
#include <fstream>
#include <sstream>
#include <iostream>

// callback function writes data to a std::ostream
static size_t data_write(void* buf, size_t size, size_t nmemb, void* userp)
{
    if(userp)
    {
        std::ostream& os = *static_cast<std::ostream*>(userp);
        std::streamsize len = size * nmemb;
        if(os.write(static_cast<char*>(buf), len))
            return len;
    }

    return 0;
}

/**
 * timeout is in seconds
 **/
CURLcode curl_read(const std::string& url, std::ostream& os, long timeout = 30)
{
    CURLcode code(CURLE_FAILED_INIT);
    CURL* curl = curl_easy_init();

    if(curl)
    {
        if(CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &data_write))
        && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L))
        && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L))
        && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_FILE, &os))
        && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout))
        && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_URL, url.c_str())))
        {
            code = curl_easy_perform(curl);
        }
        curl_easy_cleanup(curl);
    }
    return code;
}

int main()
{
    curl_global_init(CURL_GLOBAL_ALL);

    std::ofstream ofs("output.html");
    if(CURLE_OK == curl_read("http://google.com", ofs))
    {
        // Web page successfully written to file
    }

    std::ostringstream oss;
    if(CURLE_OK == curl_read("http://google.com", oss))
    {
        // Web page successfully written to string
        std::string html = oss.str();
    }

    if(CURLE_OK == curl_read("http://google.com", std::cout))
    {
        // Web page successfully written to standard output (console?)
    }

    curl_global_cleanup();
}
有什么问题吗

编辑: 无错误程序:

#include <stdio.h>
#include <curl/curl.h>
//#include <curl.h>
//#include <curlbuild.h>

int main(void)
{
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");
    // example.com is redirected, so we tell libcurl to follow redirection  
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);

    // Perform the request, res will get the return code  
    res = curl_easy_perform(curl);
    // Check for errors  
    if(res != CURLE_OK)
      fprintf(stderr, "curl_easy_perform() failed: %s\n",
              curl_easy_strerror(res));

    // always cleanup  
    curl_easy_cleanup(curl);
  }
  return 0;
}
#包括
#包括
//#包括
//#包括
内部主(空)
{
卷曲*卷曲;
卷曲编码;
curl=curl_easy_init();
if(curl){
curl\u easy\u setopt(curl,CURLOPT\u URL,“http://www.google.com");
//com被重定向,所以我们告诉libcurl遵循重定向
卷曲位置(卷曲,卷曲位置,1L);
//执行请求,res将获得返回代码
res=旋度(curl)\u容易执行(curl);
//检查错误
如果(res!=卷曲(OK)
fprintf(stderr,“curl\u easy\u perform()失败:%s\n”,
卷曲(容易的);
//总是清理
旋度\轻松\清洁(旋度);
}
返回0;
}

您是否尝试过将math.h包括在内?
我使用VisualStudio 2012,我可以使用浮点函数。

< P>错误是编译C++代码为C。将文件名改为Meal.CP../P>。CURL库试图使用编译器运行库未提供的C99 <代码>浮点< /C>函数。C89定义了
acos()
;C99也定义了
acosf()
acosl()
,但您没有可用的。您要么需要了解如何编译cURL,以便它不希望使用这些函数,要么必须编写它们:float acosf(float x){return acos(x);}Rinse and repeat-ad nautiam。然后,在链接cURL库之后,您必须修复链接行以获取函数。(添加、删除、阅读评论…)很抱歉,评论、回答、然后推翻对您的决定会造成混乱。我的错!您会问“有没有一种方法可以包含这些函数以便编译器可以看到它们?我可以下载到某个地方吗?”-合理的问题:我不知道是否有地方可以下载它们。我不太清楚到底发生了什么,仔细看看。在我诊断链接时间错误的地方,你有语法错误,所以问题并不是我想象的那样。尽管如此,MSVC是C89编译器,而不是C99或C11编译器,因此它与我所说的问题有关,但与我所说的不完全相关。@JonathanLeffler没问题,我想我应该首先为使用Windows而头疼。我简直不敢相信微软不会支持如此重要的东西。@JonathanLeffler有没有办法修改程序,使其不调用这些C99函数,而是保留其功能?@YuriSwarovski我的意思是你把
#include
放在代码的第一位,试着放在最后。可能有助于诊断,即使它不能解决问题。这应该是一个评论,而不是答案。
#include <stdio.h>
#include <curl/curl.h>
//#include <curl.h>
//#include <curlbuild.h>

int main(void)
{
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");
    // example.com is redirected, so we tell libcurl to follow redirection  
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);

    // Perform the request, res will get the return code  
    res = curl_easy_perform(curl);
    // Check for errors  
    if(res != CURLE_OK)
      fprintf(stderr, "curl_easy_perform() failed: %s\n",
              curl_easy_strerror(res));

    // always cleanup  
    curl_easy_cleanup(curl);
  }
  return 0;
}