Я планирую в основном коде попросить пользователя ввести номер телефона в форме (800) 555-1212, который будет отправлен моему конструктору PhoneNumber, а затем отправлен setPhoneNumber для его разбивки, установки личных переменных и анализа дляошибки. Кроме того, я хотел написать свой код setPhoneNumber, чтобы он учитывал ошибки пользователя в исходном вводе. Мой код PhoneNumber.h:
// PhoneNumber.h
#ifndef PHONENUMBER_H
#define PHONENUMBER_H
#include <string>
class PhoneNumber {
private:
short areaCode;
short exchange;
short line;
public:
PhoneNumber(std::string number);
void setPhoneNumber(std::string number);
void printPhoneNumber() const;
};
#endif
А вот мой код PhoneNumber.cpp
// PhoneNumber.cpp
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <cctype>
#include "PhoneNumber.h"
PhoneNumber::PhoneNumber(std::string number) {
setPhoneNumber(number);
}
void PhoneNumber::setPhoneNumber(std::string number) {
bool areaCodeDone = false;
bool exchangeDone = false;
int length = number.length();
std::istringstream iss(number);
for (int i = 0; i < length; i++) {
if (! areaCodeDone) {
if (! std::isdigit(number[i])) {
std::string str;
iss >> std::ignore();
}
else {
iss >> std::setw(3) >> areaCode;
areaCodeDone = true;
}
}
else if (! exchangeDone) {
if (! std::isdigit(number[i])) {
iss >> std::ignore();
}
else {
iss >> std::setw(3) >> exchange;
exchangeDone = true;
}
}
else {
if (! std::isdigit(number[i])) {
iss >> std::ignore();
}
else {
if (length - i < 4) {
throw std::invalid_argument("Something wrong with phone number entry.");
}
else {
iss >> std::setw(4) >> line;
}
}
}
}
}
Ошибки, которые я получаю, находятся в моих строках с std :: ignore, но я нене знаю, как я использую это неправильно. Ошибка компилятора g ++:
PhoneNumber.cpp: 23: 32: ошибка: нет совпадения для вызова '(const std :: _ Swallow_assign) ()'
iss >>std :: ignore ();
Может кто-нибудь проанализировать и помочь, пожалуйста?