c++ - 在 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;
}
我的问题是,我该如何cin
在main.cpp
? 我试过写这个,但编译器说我正在使用未初始化的变量:
int hora, min, seg;
Hora h(hora, min, seg);
std::cin >> h;
如果你需要别的东西,请告诉我。非常感谢。
解决方案
乍一看,您的问题似乎出在测试代码中,而不是重载的运算符。这段代码:
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
。
推荐阅读
- javascript - 如何跳过 cypress 中的功能,使其不进行端到端测试
- stripe-payments - 如果尚未在 Stripe Connect 帐户中添加重定向 URI,我们是否可以动态设置重定向 URI 或在运行时设置重定向 URI?
- c++ - 我将如何设置用户只能输入 4 位代码的限制?
- rest - 如何解释结果:现场服务中不存在模板项目?BIM360 API
- python - simple_query_string 和匹配短语的不同结果
- python - 在 python 列表中添加/更新一个值
- javascript - 用字符串中的坟墓替换双引号而不创建新字符串
- system.reactive - Replay(1) 从断开的源返回结果
- python - Django ORM 按日期范围分组
- php - 简单的 HTML DOM 不返回整页