Il discriminante dell'overloading si basa sui parametri passati alla funzione, non sul tipo di ritorno.
Nel tuo caso hai solo void come parametro implicito e il compilatore non sa come scegliere che funzione invocare.
Le uniche funzioni che vengono discriminate sul tipo di ritorno sono gli operatori di conversione.
Es:
Tuttavia c'è una tecnica per poter fare l'overloadin sul risultato. La trovi qui:codice:class ValAss{ private: int numi; double numd; long numl; public: ValAss(); ~ValAss(); operator int(); operator double(); operator long(); } ... ValAss numero; long L = numero; // chiama operator long() int I = numero; // chiama operator int() double D = numero; // chiama operator double. cout << numero << endl; // Errore! Il compilatore non sa che operatore chiamare. cout << static_cast<int>(numero) << endl; // OK! Il compilatore invoca operator int() return 0;
http://www.eptacom.net/pubblicazioni/pub_it/nl_7.html

Rispondi quotando