I'm still learning and this code really confuse me.

```
struct Sales_data;
std::istream &read(std::istream &is, Sales_data &item);

struct Sales_data {
  Sales_data::Sales_data(std::istream &is) {
    read(is, *this);
  }

  std::string bookNo;
  unsigned units_sold = 0;
  double revenue = 0.0;
};

```

That code basically use 2 `struct Sales_data` for making a single `Sales_data(std::istream &is) {}` constructor.

why not just do it like this?

```
struct Sales_data {
  Sales_data(std::istream &is) {
    read(is, *this);
  }

  std::string bookNo;
  unsigned units_sold = 0;
  double revenue = 0.0;
};

```