C/C++

Отсутствуют экземпляры перегруженная функция, почему подсвечивает getline()?

Учебник настолько старый, что ему место в топке. За это время много воды утекло. Моя скромная попытка переписать данный пример в духе времени.

#include <iostream>
#include <string>
#include <regex>
using namespace std;
class PhoneNumber {
string format;
friend istream& operator>>(istream& inp, PhoneNumber& pn) {
string line;
getline(inp, line);
char front = line.front();
smatch sm;
const regex re(R"(\d+)");
pn.format = front == '+' ? "+" : "(";
if (regex_search(line, sm, re)) {
pn.format += sm.str();
line = sm.suffix();
if (front != '+') pn.format += ") ";
else {
pn.format += " (";
if (regex_search(line, sm, re)) {
pn.format += sm.str() + ") ";
line = sm.suffix();
}
}
}
while (regex_search(line, sm, re)) {
pn.format += sm.str() + '-';
line = sm.suffix();
}
pn.format.pop_back();
return inp;
}
friend ostream& operator<<(ostream& out, const PhoneNumber& pn) {
return out << pn.format;
}
};
int main() {
system("chcp 1251 > nul");
PhoneNumber pn;
cout << "Введите номер телефона в формате (123) 456-7890: ";
cin >> pn;
cout << "Вы ввели: ";
cout << pn << '\n';
cout << "Введите номер телефона в формате (123) 456-78-90: ";
cin >> pn;
cout << "Вы ввели: ";
cout << pn << '\n';
cout << "Введите номер телефона в формате +7 (123) 456-78-90: ";
cin >> pn;
cout << "Вы ввели: ";
cout << pn << '\n';
system("pause > nul");
}
ДФ
Денис Фёдоров
96 532
Лучший ответ
Неправильно организован ввод через getline
Если введено большее число символов, чем принимает строка гетлайна, то статус ввода будет с ошибкой. Поэтому только первый гетлайн срабатывает - остальные будут в ошибке.
Нужно после каждого гетлайна добавить input.clear();
Макс Котков
Макс Котков
51 411