2012-05-03 19 views
12

Este es mi código:C++ no puede pasar objetos de-POD no 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; 
} 

Ésta es mi error al compilar:

main.cpp | 29 | ADVERTENCIA: no puede pasar objetos de la no -POD tipo 'struct std::string' hasta '...'; llamada abortará en tiempo de ejecución

+3

+1 para un SSCCE, -1 para no hacer una realidad pregunta. Uh, +0 supongo ... – ildjarn

Respuesta

21

El problema que tiene es que las funciones de argumentos variables no funcionan en los tipos no-POD, incluyendo std::string. Eso es una limitación del sistema y no se puede modificar. Lo que puede, por el contrario, es cambiar el código para pasar un tipo POD (en particular, un puntero a un array de caracteres terminada nul):

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

A medida que el aviso indica, std::string no es un tipo POD, y están obligados POD-tipos al llamar a funciones variadic-argumento (es decir, las funciones con un argumento ...).

Sin embargo, char const* es apropiado aquí; cambiar

curl_easy_setopt(curl, CURLOPT_URL, url); 

a

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