C++整数转字符串的转换

5

当前源代码:

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
你可以在itoa中摆脱std::string s;,只需return out.str();。返回的字符串将在stringstream被销毁之前构造。合理的编译器可能会在两种情况下生成完全相同的代码,但额外的临时变量往往会向查看您的代码的人暗示您不理解或信任C++作用域规则。 - David Schwartz
不相关的,但是你是不是想把函数命名为toString() - Neil
作为一名Java开发者,我不知道C++是否已经有了toString()方法。如果不需要,我就不想重载它。 - Sam Meow
2个回答

15

你正在将一个 Gregorian 指针分配给一个 Gregorian。 删掉 new

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

哇,这个回应速度真是太快了。非常感谢您提供如此简单的解决方案。 - Sam Meow
@SamMeow 没问题。如果答案可以的话,你可以选择它。 - juanchopanza

0

你可以使用这个函数将整数转换为字符串,在包含sstream之后:

#include <sstream>

string IntToString (int a)
{
    stringstream temp;
    temp<<a;
    return temp.str();
}

1
这并没有回答问题。 - Hatted Rooster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接