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!