С++ не может передавать объекты типа не-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'
через '...'
; вызов прерывается во время выполнения
Ответы
Ответ 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());