2012-05-03 16 views
12

Questo è il mio codice:C++ non può passare oggetti di non-POD tipo

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

Questo è il mio errore quando si compila:

main.cpp | 29 | avvertimento: non può passare oggetti di non -POD tipo 'struct std::string' tramite '...'; chiamare verrà interrotta a runtime

+3

+1 per uno SSCCE, -1 per in realtà non chiedere a un domanda. Uh, +0 Immagino ... – ildjarn

risposta

21

Il problema che hai è che le funzioni di argomenti variabili non funzionano su tipi non-POD, tra cui std::string. Questa è una limitazione del sistema e non può essere modificata. Quello che si può, d'altra parte, è modificare il codice per passare un tipo di POD (in particolare un puntatore a un array di caratteri che termina con NUL):

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

Come avviso indica, std::string non è un POD-tipo e POD-tipi sono necessari per le chiamate a funzioni variadic-argomenti (cioè funzioni con un argomento ...).

Tuttavia, char const* è appropriato qui; cambiare

curl_easy_setopt(curl, CURLOPT_URL, url); 

a

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