2012-05-03 6 views
12

To jest mój kod:C++ nie można przekazać obiekty non-POD typu

#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; 
} 

To jest mój błąd podczas kompilacji:

main.cpp | 29 | ostrzeżenie: nie można przekazać obiekty non -POD typ 'struct std::string' do '...'; nazwać przerwie w czasie wykonywania

+3

+1 dla SSCCE, -1 za nie faktycznie prosząc pytanie. Uh, +0 Zgaduję ... – ildjarn

Odpowiedz

21

Problemem jest to, że masz zmienne funkcje argumentów nie działają na typy nie-POD, w tym std::string. Jest to ograniczenie systemu i nie można go modyfikować. Co można, z drugiej strony, jest zmienić swój kod przekazać typ POD (w szczególności wskaźnik do nul zakończone tablicę znaków):

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

Jako sygnalizuje ostrzeżenie, std::string nie jest typu POD i wymagane są POD typy podczas wywoływania funkcji zmiennej liczbie argumentów, argumentów (tj funkcji oznaczonych ... argumentu).

Odpowiednia jest tutaj nazwa char const*; zmienić

curl_easy_setopt(curl, CURLOPT_URL, url); 

do

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