Я планирую в основном коде попросить пользователя ввести номер телефона в форме (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 ();
Кто-нибудь может проанализировать и помочь, пожалуйста?