2012-04-23 44 views
5

mã nguồn hiện tại:C++ int chuỗi chuyển đổi

string itoa(int i) 
{ 
    std::string s; 
    std::stringstream out; 
    out << i; 
    s = out.str(); 
    return s; 
} 

class Gregorian 
{ 
    public: 
     string month; 
     int day; 
     int year; //negative for BC, positive for AD 


     // month day, year 
     Gregorian(string newmonth, int newday, int newyear) 
     { 
      month = newmonth; 
      day = newday; 
      year = newyear; 
     } 

     string twoString() 
     { 
      return month + " " + itoa(day) + ", " + itoa(year); 
     } 

}; 

Và trong chính của tôi:

Gregorian date = new Gregorian("June", 5, 1991); 
cout << date.twoString(); 

Tôi nhận được lỗi này:

mayan.cc: In function ‘int main(int, char**)’: 
mayan.cc:109:51: error: conversion from ‘Gregorian*’ to non-scalar type ‘Gregorian’ requested 

Có ai biết tại sao int thế nào để chuyển đổi chuỗi không thành công ở đây? Tôi khá mới với C + + nhưng quen thuộc với Java, tôi đã dành rất nhiều thời gian tìm kiếm một câu trả lời đơn giản cho vấn đề này nhưng hiện tại đang bối rối.

+2

Bạn có thể thoát khỏi của 'std :: string s;' trong 'itoa' và chỉ 'trở out.str();'. Chuỗi trả về sẽ được xây dựng trước khi chuỗi bị phá hủy. Các trình biên dịch hợp lý có khả năng sẽ tạo ra cùng một mã chính xác trong cả hai trường hợp, nhưng tạm thời bổ sung có xu hướng gợi ý cho những người xem mã của bạn mà bạn không hiểu hoặc tin tưởng các quy tắc phạm vi C++. –

+0

Không liên quan, nhưng ý bạn là đặt tên hàm là 'toString()'? – Neil

+0

Đến từ Java, tôi không biết liệu C++ đã có phương thức toString() chưa. Tôi không muốn quá tải nó nếu tôi không cần. –

Trả lời

15

Bạn đang chỉ định con trỏ Gregorian đến Gregorian. Thả new:

Gregorian date("June", 5, 1991); 
+1

+1 Tôi quá chậm :) – chris

+0

@chris trông giống như cuối cùng tôi đang học cách gõ :-) – juanchopanza

+0

Ồ, đó là một phản ứng cực kỳ nhanh. Cảm ơn bạn vì một giải pháp đơn giản như vậy. –

Các vấn đề liên quan