2012-04-23 3 views
5

Текущий исходный код:C++ INT для преобразования строки

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

}; 

И моя главная:

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

Я получаю эту ошибку:

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

Кто-нибудь знает, почему Int к преобразованию строк здесь не удается? Я довольно новичок в C++, но знаком с Java, я потратил много времени на поиск прямого ответа на эту проблему, но в настоящее время я в тупике.

+2

Вы можете избавиться от 'станд :: строка s,' 'в itoa' и просто' вернуть out.str(); '. Возвращаемая строка будет построена до уничтожения строки. Разумные компиляторы, скорее всего, производят один и тот же код в обоих случаях, но дополнительные временные предложения обычно предлагают людям, которые смотрят на ваш код, который вы не понимаете или не доверяете правилам C++. –

+0

Несвязанный, но вы имели в виду функцию 'toString()'? – Neil

+0

Исходя из Java, я не знал, имел ли в C++ метод toString(). Я не хотел перегружать его, если мне это не нужно. –

ответ

15

Вы назначаете указатель Gregorian на номер Gregorian. Отбросьте new:

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

+1 Я слишком медленный :) – chris

+0

@chris выглядит, я наконец-то научился печатать :-) – juanchopanza

+0

Вау, это был невероятно быстрый ответ. Большое спасибо за такое простое решение. –

Смежные вопросы