Давайте разберем, что такое const std::string&
const
- это идентификатор в c ++, который ставится перед типом, чтобы показать, что тип не может быть изменен после инициализации.
Для пример, следующий код не скомпилирует const int x = 5; x = 10;
Однако это произойдет.
int x = 5;
x = 10
std::string
- это класс, представляющий массив символов.
&
называется ссылкой , Ссылка имеет семантику, аналогичную указателю, но пока не беспокойтесь об этом.
Давайте рассмотрим вашу первую функцию.
std::string getString( std::istream& is, std::ostream& os, const std::string& prompt );
Требуется 3 аргумента, ссылка на входной поток, использует оператор >>
, ссылку на выходной поток, который использует оператор <<
, и std :: string.
Это, вероятно, выглядит знакомым.
std::cout << "Hello World!" << std::endl;
Он печатает строку "Привет мир!" на стандартный вывод std :: cout имеет тот же тип, что и вторая переменная во всех ваших функциях, а именно: os
.
Первая проблема заключается в том, как вы ее называете.
getString(is, os);
You ' передаем два, но ожидаем три!
Похоже, вы должны написать приглашение в вызове функции ... Под этим я подразумеваю, что
getString(is, os);
становится
getString(is, os, "what is your favorite string");
Тогда в определении вашей функции для getString
вы не хотите жестко кодировать эту строку. Вы хотите использовать все, что пропускает звонящий! то есть
std::string getString(std::istream& is, std::ostream& os, const std::string& prompt)
{
std::string color;
os << prompt;
is >> color;
return color;
}
Бонусные баллы - Поскольку вы были смущены const std::string&
, давайте разберем это немного дальше.
Если наша функция выглядела так,
std :: string getString (std :: istream & is, std :: ostream & os, std :: string & prompt);
и мы определили его как
std::string getString(std::istream& is, std::ostream& os, std::string& prompt)
{
std::string color;
os << prompt;
is >> color;
prompt = "What is your favorite dog?";
return color;
}
Как вы думаете, что произойдет если мы вызвали эту функцию дважды, как,
getString(is, os, "What is your favorite color?");
getString(is, os, "What is your favorite color?");