Проблемы с использованием перегруженного оператора извлечения в C ++ - PullRequest
0 голосов
/ 11 февраля 2020

Я создал класс Time со следующей перегрузкой оператора >> (они используют формат ЧЧ: ММ: СС):

inline std::istream& operator>>(std::istream& in, Hora& h) { //Our teacher says we have to implement it with inline and not with friend
    std::string aux;
    in >> aux;
    std::string aux_hora = aux.substr(0, 1);
    std::string aux_min = aux.substr(3, 4);
    std::string aux_seg = aux.substr(6, 7);
    h = Hora(std::stoi(aux_hora), std::stoi(aux_min), std::stoi(aux_seg));
    return in;
}

Моя проблема в том, как мне использовать cin оператор то в main.cpp? Я пытался написать это, но компилятор говорит, что я использую неинициализированные переменные:

int hora, min, seg;
Hora h(hora, min, seg);
std::cin >> h;

Если вам нужно что-то еще, пожалуйста, сообщите мне. Большое спасибо.

1 Ответ

3 голосов
/ 11 февраля 2020

На первый взгляд похоже, что ваша проблема в тестовом коде, а не в перегруженном операторе. Этот код:

int hora, min, seg;
Hora h(hora, min, seg);

... создает объект Hora, инициализированный из текущих значений hora, min и seg. Но они не были инициализированы ...

Я бы попробовал что-то вроде:

int hora=0, min=0, seg=0;
Hora h(hora, min, seg);

... и посмотрю, исправляет ли это предупреждение. Если нет, мне кажется, что предупреждение, вероятно, содержится в коде, который вы нам не показывали.

Обязательное отступление: когда / если вы хотите сделать что-то подобное в реальном коде (а не просто в назначении), вы вероятно, вместо этого нужно использовать std::get_time.

...