elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Por qué es ambigua la llamada a este método?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Por qué es ambigua la llamada a este método?  (Leído 2,904 veces)
Repikas

Desconectado Desconectado

Mensajes: 2


Ver Perfil
¿Por qué es ambigua la llamada a este método?
« en: 25 Junio 2017, 21:25 pm »

Buenas, en el siguiente código se intenta llamar a una función f de la clase D, que hereda de B y C, en esta clase hay un sólo método f() ya que no hay duplicados al heredar virtualmente y un método f(int), los métodos se llaman igual pero reciben distinto tipo de parámetro, ¿por qué es ambiguo entonces?
Código:
struct A {
    void f() {}
};

struct B: virtual A {
    void f(int i) {}
};

struct C: virtual A {
    void f() {}
};

struct D: B, C {

};

int main()
{
    D d;
    d.f(5); //ambiguo
}

Gracias y un saludo


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: ¿Por qué es ambigua la llamada a este método?
« Respuesta #1 en: 26 Junio 2017, 14:43 pm »

Un par de conceptos rápidos.

Si una clase hereda de otra  y tiene un método con el mismo nombre y diferentes parámetros, el método de la clase base no serña visible (salvo que se utilice un using A::f; dentro de la clase hija)

Sin embargo, ese no es el problema aquí. Aquí el problema es que si D hereda de 2 clases que tienen 2 métodos con el mismo nombre, habrá ambigüedad aunque tengan diferentes parámetros. Para evitarlo, puedes escribir using para cada función:
Código
  1. using B::f;
  2. using C::f;

En cualquier caso, salvo que vayas a heredar de una clase con funciones virtuales o salvo que quieras realmente eliminar la función de la base, mejor evitar tener métodos con el mismo nombre en diferentes clases de una herencia.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con este método. « 1 2 »
Java
Aikanáro Anário 11 7,863 Último mensaje 25 Octubre 2011, 17:36 pm
por |Miguel|
Error en llamada a metodo
Java
m@o_614 4 3,222 Último mensaje 14 Mayo 2012, 01:03 am
por [Case]
que hace este metodo css()
Desarrollo Web
franfis 1 1,909 Último mensaje 7 Julio 2013, 04:10 am
por NetStorm
Consulta sobre llamada a un metodo
Java
kurupi13 2 2,256 Último mensaje 1 Octubre 2013, 21:39 pm
por kurupi13
Redireccion de descriptores de archivo supuestamente ambigua (bash)
GNU/Linux
4v1dy4 2 3,864 Último mensaje 29 Diciembre 2022, 13:15 pm
por 4v1dy4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines