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
}
};
¿Por qué C++ no puede llamar a la función gratuita (que es la única con la firma correcta)?función miembro que oculta la función libre
En este caso, puede usar ':: foo (42)' para acceder al foo externo. [Demo de Ideone] (http://ideone.com/6HljO). Pero no sé mucho sobre espacios de nombres. –
Considero que es un talón de Aquiles de C++. Hace imposible el uso elegante de nombres de funciones libres sobrecargados comunes, como isempty (thing), donde hay muchas sobrecargas para tipos de cosas vacíos, al tiempo que permite que también exista thing.isempty(). Estúpido, desafortunado, torpe. – Mordachai