Creating a SOA database with encapsulating interface c++

I want to create a SOA database but also have a separate interface that gives encapsulation. I am close to the design I think but would like more experienced coding eyes to have a look to critique my design. Here is what I have so far:

struct OrbitalDataBase
  {
    OrbitalDataBase(uint32_t a_number_of_orbitals)
      : number_of_lm_pairs_per_orbital(a_number_of_orbitals, 0)
    {
      number_of_orbitals = a_number_of_orbitals;
    }

    inline void
    StoreData(const uint32_t &                             a_ith_orbital,
              std::shared_ptr<FEMDVR>                      a_femdvr_grid,
              std::shared_ptr<MOPartialWaveRepresentation> a_MO)
    {
      Assert(a_ith_orbital < number_of_orbitals,
             ExcMessage(
               "OrbitalDataBase was constructed with fewer orbitals!"));

      uint32_t stride = a_femdvr_grid->getNbas() * a_MO->getNumChannels();

      for (uint32_t i = 0; i < stride; ++i)
        {
          m_orbital_coefs(a_ith_orbital * stride + i) =
            a_MO->getPartialWaveRep(i);
          m_orbital_coefs_index(a_ith_orbital * stride + i) =
            a_ith_orbital * stride + i;
        }
    }

  private:
    uint32_t                          number_of_orbitals;
    std::vector<uint32_t>             number_of_lm_pairs_per_orbital;
    std::vector<std::complex<double>> m_orbital_coefs;
    std::vector<uint32_t>             m_orbital_coefs_index;
  };

  struct OrbitalAccessor
  {
    inline std::complex<double>
    coef(uint32_t ith_orbital, uint32_t stride, uint32_t i) const
    {
      uint32_t coefs_index =
        orbital_data
          ->m_orbital_coefs_index(ith_orbital * stride + i);
      return orbital_data->m_orbital_coefs(coefs_index);
    }

  private:
    OrbitalDataBase *orbital_data;
  };


How this would work is construct the database with the number of orbitals and then in a for-loop, save all the ith_orbital’s coefficients in one large array. Something like this

uint32_t number_of_orbitals = 5;
OrbitalDataBase orb_data_base(number_of_orbitals);
for (uint32_t ith_orbital = 0; ith_orbital < number_of_orbitals < ++ith_orbital)
  {
    Orbital();
    orb_data_base.StoreData(ith_orbital, femdvr_grid, orbital);
  }

The Orbital() function just creates the orbital I want to store. Then the OrbitalAccessor should be able to access these large arrays index with stride ith_orbital. I think I should pass the accessor the orbital I want to access in a constructor like

  OrbitalAccessor orb_accessor(ith_orbital);
  orb_accessor.coef(index);

This code doesn’t compile. I get 'm_orbitals_coefs' is a private member of 'OrbitalDataBase'. I have tried to make it a friend struct but don’t know how to do that really and I am not sure if this is the best way to do what I’m wanting anyways.

Ideally I would like to reserve enough space in my vectors in OrbitalDataBase also.