C ++ Как отобразить / распечатать строковый объект? cout << int works, cout << строка не - PullRequest
2 голосов
/ 06 августа 2011

Я столкнулся с проблемой, которую Google не смог решить. Почему этот cout работает для объекта int, а не для строкового объекта в следующей программе?

#include<iostream>
using namespace std;
class MyClass {
    string val;
public:
    //Normal constructor.
    MyClass(string i) {
        val= i;
        cout << "Inside normal constructor\n";
    }
    //Copy constructor 
    MyClass(const MyClass &o) {
        val = o.val;
        cout << "Inside copy constructor.\n";
    }
    string getval() {return val; }
};
void display(MyClass ob)
{
    cout << ob.getval() << endl;    //works for int but not strings
}
int main()
{
    MyClass a("Hello");
    display(a);
    return 0;
}

Ответы [ 2 ]

9 голосов
/ 06 августа 2011

Вы должны включить заголовок string, чтобы получить перегруженный operator<<.

Также вы можете захотеть вернуть const string& вместо string из getval, измените конструктор напримите const string& вместо string и измените display на const MyClass& ob, чтобы избежать ненужного копирования.

2 голосов
/ 05 сентября 2012

Я не знаю, что работает для вас или если вы исправили это, но я просто работал над этим ... для вашего cout вы должны поставить строку как cout << "вставить строку здесь" << endl; Вы не ставите второй << после строки. Надеюсь, это поможет! </p>

...