The structs are public, so other classes use instances of them when working with the containing class.

Also, imagine this code (but ignore its simplicity):
Code:
class Example
{
public:
  struct Data
  {
    std::string name;
    std::string value;
  };
  struct Separators
  {
    std::string middle;
    std::string end;
  };

  void OutputData(bool bMaleNotFemale) const;

private:
  Data north_data;
  Data south_data;
  Data east_data;
  Data west_data;

  Separators male_sep;
  Separators female_sep;
};

void Example::OutputData(bool bMaleNotFemale) const
{
  if (bMaleNotFemale)
  {
    std::cout << north_data.name << male_sep.middle;
    std::cout << north_data.value << male_sep.end;

    std::cout << south_data.name << male_sep.middle;
    std::cout << south_data.value << male_sep.end;

    std::cout << east_data.name << male_sep.middle;
    std::cout << east_data.value << male_sep.end;

    std::cout << west_data.name << male_sep.middle;
    std::cout << west_data.value << male_sep.end;
  }
  else
  {
    std::cout << north_data.name << female_sep.middle;
    std::cout << north_data.value << female_sep.end;

    std::cout << south_data.name << female_sep.middle;
    std::cout << south_data.value << female_sep.end;

    std::cout << east_data.name << female_sep.middle;
    std::cout << east_data.value << female_sep.end;

    std::cout << west_data.name << female_sep.middle;
    std::cout << west_data.value << female_sep.end;
  }
}
Now, obviously, that's pretty lame code duplication, right? What if I did this instead:
Code:
class Example
{
public:
  struct Data
  {
    std::string name;
    std::string value;
  };
  struct Separators
  {
    std::string middle;
    std::string end;
  };

  void OutputData(bool bMaleNotFemale) const;

private:
  void OutputData(const Data& data, const Separators& sep) const;

  Data north_data;
  Data south_data;
  Data east_data;
  Data west_data;

  Separators male_sep;
  Separators female_sep;
};

void Example::OutputData(bool bMaleNotFemale) const
{
  const Separators& sep = bMaleNotFemale ? male_sep : female_sep;

  OutputData(north_data, sep);
  OutputData(south_data, sep);
  OutputData(east_data, sep);
  OutputData(west_data, sep);
}

void Example::OutputData(const Data& data, const Separators& sep) const
{
  std::cout << data.name << sep.middle;
  std::cout << data.value << sep.end;
}
Voila!