Estoy confundido por esta situación y Google no me dio la respuesta. Básicamente tengo el siguiente código simple que no se compila:llamada ambigua a la función estática sobrecargada
#include <iostream>
class A
{
public:
int a(int c = 0) { return 1; }
static int a() { return 2; }
};
int main()
{
std::cout << A::a() << std::endl;
return 0;
}
En la elaboración de este, GCC 4.2 dice que la llamada a A::a()
en main()
es ambigua con las dos versiones de a()
candidatos válidos. El compilador LLVM 3.0 de Apple compila sin error.
¿Por qué gcc está confundido acerca de qué función quiero llamar? Pensé que era obvio que calificando a()
con A::
estoy pidiendo la versión static
de la función. Naturalmente, este código aún no se compila si elimino la función static
a()
, porque A::a()
no es una sintaxis válida para llamar al static
a()
.
¡Gracias por cualquier comentario!
BTW, búsqueda de Google rápida por mí: "Resolución de nombre de funciones de miembro estáticas y no estáticas C++" surgió con otra pregunta de SO: http: //stackoverflow.com/questions/5365689/c-overload-static-function -with-no-static-function – Bingo
oops mi google-fu me ha fallado ... – fang