void foo(int)
{
}
class X
{
void foo()
{
}
void bar()
{
foo(42);
// error: no matching function for call to 'X::foo(int)'
// note: candidate is:
// note: void X::foo()
// note: candidate expects 0 arguments, 1 provided
}
};
Perché il C++ non è in grado di chiamare la funzione gratuita (che è l'unica con la firma corretta)?funzione membro che nasconde la funzione libera
In questo caso, è possibile utilizzare ':: foo (42)' per accedere al foo esterna. [Demo di Ideone] (http://ideone.com/6HljO). Ma non so molto dei namespace. –
Ritengo che questo sia uno tallone d'Achille di C++. Rende impossibile l'uso elegante dei nomi di funzioni libere comuni sovraccaricati, come ad esempio isempty (cosa), dove ci sono molti overload per i tipi di cose isempty, mentre consente anche a thing.isempty() di esistere. Stupido, sfortunato, goffo. – Mordachai