2012-05-03 5 views
12

Dieser ist mein Code:C++ kann keine Objekte vom Typ nicht-POD passiert

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

Das ist mein Fehler beim Kompilieren:

main.cpp | 29 | Warnung: kann keine Objekte von nicht passieren -POD Typ 'struct std::string' bis '...'; nennen

+3

+1 für eine SSCCE, -1 für nicht wirklich ein zu fragen Frage. Äh, +0 ich denke ... – ildjarn

Antwort

21

Das Problem, das Sie haben, ist, dass variable Argument Funktionen funktionieren nicht auf nicht-POD-Typen, einschließlich std::string. Das ist eine Einschränkung des Systems und kann nicht geändert werden. Was Sie können, auf der anderen Seite, ist Ihren Code ändern, um einen POD-Typ übergeben (insbesondere einen Zeiger auf eine nul Zeichenfeld beendet):

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

zur Laufzeit abbrechen Da die Warnung zeigt, std::string ist kein POD-Typ und POD-Typen erforderlich sind, wenn variadische-Argument Funktionen aufrufen (das heißt Funktionen mit einem ... Argument).

Allerdings ist char const* hier angebracht; ändern

curl_easy_setopt(curl, CURLOPT_URL, url); 

zu

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