2012-05-03 17 views
12

Đây là mã của tôi:C++ không thể vượt qua các đối tượng của phi POD loại

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

Đây là lỗi của tôi khi biên dịch:

main.cpp | 29 | cảnh báo: không thể vượt qua các đối tượng của phi -POD loại 'struct std::string' đến '...'; gọi sẽ hủy bỏ trong thời gian chạy

+3

+1 cho SSCCE, -1 vì không thực sự yêu cầu câu hỏi. Uh, +0 tôi đoán ... – ildjarn

Trả lời

21

Vấn đề bạn có là chức năng lập luận biến không làm việc trên các loại phi POD, bao gồm std::string. Đó là một sự hạn chế của hệ thống và không thể sửa đổi được. Mặt khác, những gì bạn có thể thay đổi mã của bạn để chuyển loại POD (đặc biệt là một con trỏ tới một mảng ký tự kết thúc):

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

Như lời cảnh báo cho thấy, std::string không phải là một POD-type, và POD-loại được yêu cầu khi gọi chức năng variadic đối số (ví dụ: chức năng với một cuộc tranh cãi ...).

Tuy nhiên, char const* thích hợp ở đây; thay đổi

curl_easy_setopt(curl, CURLOPT_URL, url); 

để

curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); 
Các vấn đề liên quan