Petite règle, il vaut mieux faire une forward declaration quand :
Tu utilises un pointeur ou une reference du type
Quand le type est retourné ou le paramètre d'une déclaration de fonction
Quand le type est associé au mot clef static.
Voir ce message sur stackoverflow : http://stackoverflow.com/questions/389957/forward-declaration-of-a-base-class/390124#390124
Dans ton cas tu fais une inclusion croisée, ce n'est pas bon, utilise des forward declaration dans le h et les includes dans les cpp, et dans le bon ordre, c'est à dire dans client.cpp tu inclus client.h en premier puis l'autre en second et vice versa dans l'autre cpp.