首页 > 解决方案 > 在 C++ 中使用重载提取运算符的问题

问题描述

我创建了一个具有以下>>运算符重载的 Time 类(它们使用 HH:MM:SS 格式):

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;
}

我的问题是,我该如何cinmain.cpp? 我试过写这个,但编译器说我正在使用未初始化的变量:

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

如果你需要别的东西,请告诉我。非常感谢。

标签: c++operator-overloading

解决方案


乍一看,您的问题似乎出在测试代码中,而不是重载的运算符。这段代码:

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

...创建一个对象,从、和Hora的当前值初始化。但是那些还没有初始化...horaminseg

我会尝试类似的东西:

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

...看看是否可以解决警告。如果不是,在我看来,警告可能出现在您没有向我们展示的代码中。

除了强制性的:当/如果你想在真实代码中做这样的事情(不仅仅是一个赋值)你可能想要使用它std::get_time


推荐阅读