错误C2678:二进制'>>' :没有找到哪个运算符采用'std :: istream'类型的左手操作数

时间:2014-12-16 20:21:38

标签: compiler-errors

请帮忙解决问题。错误C2678:二进制'>>' :找不到哪个运算符采用了类型' std :: istream'的左手操作数。 (或没有可接受的转换)出现在带有cin的行中

#include <iostream>
#include <string>
using namespace std;
struct Sales_data
{
  string ISBN;
  unsigned units_sold;
  double revenue;
};
int main ()
{
  Sales_data item;
  while (cin >> item)
  {
    cout << item << endl;
  }

  system ("pause");
  return 0;
}

1 个答案:

答案 0 :(得分:0)

Sales_data是您定义的自定义结构,因此默认情况下operator>>operator<<没有重载,它将您的结构作为参数。你应该自己实现这些功能,它可能看起来像这样:

std::istream& operator>>(std::istream& stream, Sales_data& data) {
    return stream >> data.ISBN >> data.units_sold >> data.revenue;
}

std::ostream& operator<<(std::ostream& stream, const Sales_data& data) {
    return stream << data.ISBN << data.units_sold << data.revenue;
}

Sales_data声明和main定义之间插入。