C++使用cout输出struct结构体时报运算符不匹配错误求助
错误原因
C++标准库的std::ostream类仅内置了基础数据类型、标准库类型的<<运算符输出逻辑,没有为用户自定义的Tekma结构体提供默认的运算符实现。直接将Tekma类型的实例传入cout输出时,编译器无法匹配到对应的运算符重载函数,就会抛出该类型不匹配错误。
解决方案
提供两种可选实现方式:
方式一:直接输出目标成员(快速修复)
如果仅需要输出结构体中的prejetih成员,直接访问返回实例的对应成员输出即可,仅需修改main函数中的输出代码:
// 把原来的cout << najvec_kosev(tekme); 替换为以下代码 cout << najvec_kosev(tekme).prejetih;
该方案无需修改其他逻辑,适配单次输出的场景。
方式二:重载<<运算符(长期复用)
如果后续有多次输出Tekma结构体的需求,可以直接为该类型重载<<运算符,修改结构体定义如下:
struct Tekma { int prejetih; // 新增友元函数重载<<运算符 friend std::ostream& operator<<(std::ostream& os, const Tekma& obj) { // 可自定义输出格式,例如需要加前缀可调整为 os << "prejetih值为:" << obj.prejetih; os << obj.prejetih; return os; } };
重载完成后,原有输出代码cout << najvec_kosev(tekme);即可正常运行。
内容的提问来源于stack exchange,提问作者Tim Hajdinjak
相关产品推荐
相关产品推荐

