Grazie 1000, finalmente sono riucito a capire il meccanismo... 
Ecco il codice funzionante:
Codice PHP:
#include <string>
#include <iostream>
using namespace std;
class Pippo; // pre-dichiarazione
class Pluto; // pre-dichiarazione
class Pluto {
public:
Pluto(){};
~Pluto(){};
void saluta(Pippo *p);
string getNome(){ return "Pluto"; };
};
class Pippo {
public:
Pippo(){};
~Pippo(){};
void saluta(Pluto *p);
string getNome(){ return "Pippo"; };
};
void Pluto::saluta(Pippo * pippo) {
cout<< "Ciao a "<< pippo->getNome() << " da " << this->getNome() << endl;
}
void Pippo::saluta(Pluto * pluto) {
cout<< "Ciao a "<< pluto->getNome() << " da " << this->getNome() << endl;
}
int main() {
Pippo * pippo = new Pippo();
Pluto * pluto = new Pluto();
pippo->saluta(pluto);
pluto->saluta(pippo);
return 0;
}
Finalmente Pippo e Pluto possono salutarsi a vicenda... 
Ciao!