I decided to split the classes in different files. I achieved this in two ways, but I'm not sure which one is the best.
1ST WAY:
Critter.h#ifndef CRITTER_H#define CRITTER_H<b>class Farm;</b>class Critter{public: Critter( const std::string& name = "" ); std::string GetName() const;private: std::string m_Name;};#endif
Farm.h#ifndef FARM_H#define FARM_H //#include "Critter.h" -> not using thisclass Critter;class Farm{public: Farm( int spaces = 1 ); void Add( const Critter& aCritter ); void RollCall() const;private: std::vector< Critter > m_Critters;};#endif
Farm.cpp#include <iostream>#include <string>#include <vector>#include "Farm.h"#include "Critter.h" // ->have to use thisFarm::Farm( int spaces ){ m_Critters.reserve( spaces );}void Farm::Add( const Critter& aCritter ){ m_Critters.push_back( aCritter );}void Farm::RollCall() const{ for( std::vector< Critter >::const_iterator iter = m_Critters.begin(); iter < m_Critters.end(); ++iter ) std::cout << iter->GetName() << " here.\n";}
So I'm avoiding cyclic dependency. I think it's unnecessary though because
Critter doesn't need
Farm.
--------------------------------------------------------------------------------
2nd wayCritter.h#ifndef CRITTER_H#define CRITTER_Hclass Critter{public: Critter( const std::string& name = "" ); std::string GetName() const;private: std::string m_Name;};#endif
Farm.h"#ifndef FARM_H#define FARM_H#include "Critter.h"class Farm{public: Farm( int spaces = 1 ); void Add( const Critter& aCritter ); void RollCall() const;private: std::vector< Critter > m_Critters;};#endif
Farm.cpp#include <iostream>#include <string>#include <vector>#include "Farm.h"Farm::Farm( int spaces ){ m_Critters.reserve( spaces );}void Farm::Add( const Critter& aCritter ){ m_Critters.push_back( aCritter );}void Farm::RollCall() const{ for( std::vector< Critter >::const_iterator iter = m_Critters.begin(); iter < m_Critters.end(); ++iter ) std::cout << iter->GetName() << " here.\n";}
--------------------------------------------------------------------------------
So that's it. I think that the first way is better, but I want to be sure. Thanks in advance.