C++无法传递非POD类型的对象。

17

这是我的代码:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <stdio.h>
#include <curl/curl.h>
using namespace std;
int main ()
{
    ifstream llfile;
    llfile.open("C:/log.txt");

    if(!llfile.is_open()){
        exit(EXIT_FAILURE);
    }

    string word;
    llfile >> word;
    llfile.close();
    string url = "http://example/auth.php?ll=" + word;

    CURL *curl;
    CURLcode res;

    curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url);
        res = curl_easy_perform(curl);

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

编译时出现以下错误:

main.cpp|29|警告:无法通过'...'传递非POD类型'struct std::string'的对象;调用将在运行时终止


3
+1 表示支持提供一个最小化、自包含且能复现问题的代码示例,-1 表示没有实际提问。嗯,我猜应该是不打分吧... - ildjarn
2个回答

26

你遇到的问题是可变参数函数不适用于非POD类型,包括std::string。这是系统的限制,无法修改。但是,你可以改变代码,传递一个POD类型(特别是指向空终止字符数组的指针):

curl_easy_setopt(curl, CURLOPT_URL, url.c_str());

12

正如警告所示,std::string不是POD类型,在调用可变参数函数(即带有...参数的函数)时需要使用POD类型。

然而,在这里适当的类型是char const*,请更改。

curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接