Вывод std::string

В примере кода ниже

    std::string result = exec( "dir" ) ;
    cout<<result;

Я получаю следующую ошибку

error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class std::basic_string

I suspect there is a special method to print out an std::string.

Пожалуйста, помогите мне отладить это.

Кроме того, я включил заголовочные файлы iostream.h, fstream.h и stream.


person Tabrez Ahmed    schedule 19.05.2012    source источник
comment
Вы должны были включить <iostream> и <fstream> без h. Если это не поможет, покажите больше кода. У вас есть using namespace std?   -  person Mr Lister    schedule 19.05.2012
comment
Вы включили #include <string>?   -  person Naveen    schedule 19.05.2012
comment
@MrLister: Спасибо. вы решили это. Пожалуйста, опубликуйте это как ответ, чтобы другие использовали его ... спасибо.   -  person Tabrez Ahmed    schedule 19.05.2012
comment
Спасибо вам всем. @MrLister точно указал на ошибку. Жду, когда он добавит ответ, чтобы изменить статус этого вопроса.   -  person Tabrez Ahmed    schedule 19.05.2012
comment
В будущем, пожалуйста, предоставьте самую короткую полную программу, которую вы можете создать, которая демонстрирует проблему. Вы не можете ожидать, что люди будут отлаживать всю программу всего из двух строк кода, особенно если эти две строки не включают ошибку. См. sscce.org.   -  person Robᵩ    schedule 20.05.2012
comment
@Robᵩ: На самом деле, публикуя вопрос, я просто заподозрил ошибку в этих двух строках. Я не знал, что ошибка была где-то еще, когда я публиковал вопрос.   -  person Tabrez Ahmed    schedule 20.05.2012
comment
И именно поэтому я прошу вас в будущих вопросах включать полную программу; только тогда вы гарантированно включите проблемные части.   -  person Robᵩ    schedule 20.05.2012
comment
@Robᵩ: Спасибо, в следующий раз я обязательно позабочусь.   -  person Tabrez Ahmed    schedule 20.05.2012


Ответы (4)


Я подозреваю, что вам нужно квалифицировать cout с std::

    std::cout << result;

или добавьте using namespace::std в начало файла cpp.

person Sergey Kalinichenko    schedule 19.05.2012
comment
@KerrekSB Я бы согласился, если бы мы говорили о добавлении using namespace::std в заголовок: это большое нет-нет. Тем не менее, я думаю, что в файле реализации это очень хорошо. - person Sergey Kalinichenko; 19.05.2012
comment
Ну, вы знаете современных детей. Они слышат что-то одно где-то, а затем используют это в других местах, потому что кто-то в StackOverflow сказал. Заметьте, я не говорю, что это неправильно. Просто немного сомнительно. - person Kerrek SB; 19.05.2012

Вам нужно включить <string>

person Hakan Serce    schedule 19.05.2012
comment
вы должны были упомянуть об этом в вопросе. :) - person jheriko; 20.05.2012

cout определен в <iostream>. Чтобы синтаксис << работал с std::strings, требуется <sstream>.

#include <iostream>
#include <sstream>

std::string result = "something";
std::cout << result << " and something else";
person Ozzy    schedule 17.09.2018

Отвечаю на свой вопрос от имени @MrLister, так как он был неактивен.

Я должен был включить <iostream> и <fstream> без .h. Также после этого следовало ввести using namespace std;.

Ex:

#include <string>
#include <iostream>
#include <fstream>
#include <stdlib>

using namespace std;

Большое спасибо @MrLister.

И спасибо @dasblinkenlight. Его ответ немного улучшился.

person Tabrez Ahmed    schedule 19.05.2012
comment
ХОРОШО. Вы можете пометить это как правильное, так как если бы я ответил сейчас, это выглядело бы точно так же, как ваша копия. Кстати, на самом деле вам не нужно using namespace std;, если вы вводите std:: перед всем. - person Mr Lister; 21.05.2012
comment
нет. Я только что проверил... using namespace std; нужно. Без него я получил ту же ошибку. - person Tabrez Ahmed; 21.05.2012
comment
Странно, здесь такого нет. В вашей программе должно быть больше, чем кажется на первый взгляд. - person Mr Lister; 21.05.2012
comment
Тогда я подозреваю, что у вас есть что-то еще с именем cout в другой части вашей программы. Не то, чтобы это было нехорошо, заметьте, но вот откуда эта конкретная ошибка. - person Mr Lister; 21.05.2012