Подтвердить что ты не робот

С++ не может передавать объекты типа не-POD

Это мой код:

#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 | warning: не может передавать объекты типа не-POD 'struct std::string' через '...'; вызов прерывается во время выполнения

4b9b3361

Ответ 1

Проблема заключается в том, что функции переменных аргументов не работают с типами не-POD, включая std::string. Это ограничение системы и не может быть изменено. С другой стороны, вы можете изменить свой код для передачи типа POD (в частности, указателя на массив символов с нулевым завершением):

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

Ответ 2

Как указывает предупреждение, std::string не является POD-типом, а POD-типы необходимы при вызове функций вариационного аргумента (т.е. функций с аргументом ...).

Однако char const* здесь уместно; изменение

curl_easy_setopt(curl, CURLOPT_URL, url);

к

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