You have to save how many crusades there are, so you know how many times to loop when loading them. And when loading a save you have to clear the vector you store crusades in, in case someone is loading a game from a game.
You also can't (or rather, shouldn't) save the pointer to the crusade. You don't know where in the memory it will end up next time. Where it was last time is not relevant when loading a save.
Add a crusade to the vector you use to keep track of them, then call the read(pStream) function for that crusade. You can't save crusades. You can only save the data they contain, then when loading make new crusades that load the data of the old ones.
You can pass pStream into any function you want.
You also can't (or rather, shouldn't) save the pointer to the crusade. You don't know where in the memory it will end up next time. Where it was last time is not relevant when loading a save.
Add a crusade to the vector you use to keep track of them, then call the read(pStream) function for that crusade. You can't save crusades. You can only save the data they contain, then when loading make new crusades that load the data of the old ones.
You can pass pStream into any function you want.