2012-04-23 19 views
5

Aktuelle Quellcode:C++ int String-Konvertierung

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

}; 

Und in meinem Haupt:

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

Ich erhalte diese Fehlermeldung:

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

Weiß jemand, warum int String-Konvertierung schlägt hier fehl? Ich bin ziemlich neu in C++, aber ich bin mit Java vertraut. Ich habe viel Zeit darauf verwendet, nach einer einfachen Antwort auf dieses Problem zu suchen, bin aber momentan ziemlich ratlos.

+2

Sie können von 'std :: string s loszuwerden;' in 'itoa' und nur' Rückkehr out.str(); '. Die Return-Zeichenfolge wird erstellt, bevor der Stringstream zerstört wird. Vernünftige Compiler werden wahrscheinlich in beiden Fällen den exakt gleichen Code erzeugen, aber das Extra temporär neigt dazu, Leuten, die Ihren Code betrachten, zu empfehlen, dass Sie die C++ - Scoping-Regeln nicht verstehen oder ihnen nicht vertrauen. –

+0

Nicht verwandt, aber wollten Sie die Funktion 'toString()' nennen? – Neil

+0

Aus Java stammend, wusste ich nicht, ob C++ bereits eine toString() -Methode hatte. Ich wollte es nicht überladen, wenn es nicht nötig wäre. –

Antwort

15

Sie weisen einen Gregorian Zeiger einem zu. Lassen Sie die new:

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

+1 Ich bin zu langsam :) – chris

+0

@chris sieht aus wie ich endlich lernen zu tippen :-) – juanchopanza

+0

Wow, das war eine unglaublich schnelle Antwort. Ein großes Dankeschön für solch eine einfache Lösung. –