llamada ambigua a una función sobrecargada con los mismos parámetros
class A
{
public:
// void func( const int ) const {} // если заменить на это - будет компилироватьсяvoid func( constint ) {}
// void func( const int& ) const {} // если заменить на это - будет компилироватьсяvoid func( constint& ) {}
};
voidOnStart()
{
A a;
a.func(0);
int i1 = 0;
a.func(i1);
constint i2 = 0;
a.func(i2); // 'func' - ambiguous call to overloaded function with the same parameters
}
Este ejemplo de fuente tonta ha tardado mucho en crearse. Mi sentido del humor casi desapareció mientras lo creaba.
(De acuerdo. )
En las tres versiones de la llamada es imposible entender si el argumento se pasa por valor o por referencia, por lo que el compilador no puede elegir a qué función llamar. Y el modificador const las sobrecarga: void f(){} y void f() const {} son funciones diferentes. Si en tu ejemplo declaras uno de los métodos como const, entonces la incertidumbre desaparecerá: el compilador seleccionará el método deseado dependiendo de si la llamada se hace desde un objeto constante o no (el tipo de argumento en tu ejemplo no importa).
Su objeto a no es una constante, por lo que el método sin const será llamado las tres veces. Si declaras un objeto como constante (A const a;), entonces se llamará a un método constante.
Vea cuál será el resultado:
class A
{
public:
void func() {Print("Non const");}
void func() const {Print("Const");}
};
voidOnStart()
{
A a;
A const b;
a.func();
b.func();
}
En las tres variantes de la llamada es imposible entender si un argumento se pasa por valor o por referencia, por eso el compilador no puede elegir a qué función llamar. Y el modificador const las sobrecarga: void f(){} y void f() const {} son funciones diferentes. Si en tu ejemplo declaras uno de los métodos como const, entonces la incertidumbre desaparecerá: el compilador seleccionará el método deseado dependiendo de si la llamada se hace desde un objeto constante o no (el tipo de argumento en tu ejemplo no importa).
Su objeto a no es una constante, por lo que el método sin const será llamado las tres veces. Si se declara el objeto como constante (A const a;), entonces se llamará al método constante.
Lo habrías ejecutado primero. El error está SOLO aquí
constint i2 = 0;
a.func(i2); // 'func' - ambiguous call to overloaded function with the same parameters
Todas las llamadas anteriores pasan sin problemas.
¿Qué valores de dispersión produce la funciónCopySpread() para el período del gráfico correspondiente?
No está claro si es la media, el mínimo o el máximo, y la ayuda de la función no dice nada al respecto.
¿Qué valores de dispersión produce la funciónCopySpread() para el período del gráfico correspondiente?
No está claro si es la media, el mínimo o el máximo, y la ayuda de la función no dice nada al respecto.
donde, en la cuenta o en el probador
llamada ambigua a una función sobrecargada con los mismos parámetros
¿Es un malentendido o un error?
¿Es un malentendido mío o un error?
llamada ambigua a una función sobrecargada con los mismos parámetros
¿Es un malentendido o un error?
Un malentendido.
Bueno, ya está, he contestado. ))))
A mi entender este código debe comportarse igual en ambos casos.
Eso es lo que yo también pienso.
Un malentendido.
Bueno, ya está, he contestado. ))))
Ese estúpido ejemplo de código fuente tardó mucho tiempo en crearse. Mi sentido del humor casi desapareció mientras lo creaba.
Este ejemplo de fuente tonta ha tardado mucho en crearse. Mi sentido del humor casi desapareció mientras lo creaba.
(De acuerdo. )
En las tres versiones de la llamada es imposible entender si el argumento se pasa por valor o por referencia, por lo que el compilador no puede elegir a qué función llamar. Y el modificador const las sobrecarga: void f(){} y void f() const {} son funciones diferentes. Si en tu ejemplo declaras uno de los métodos como const, entonces la incertidumbre desaparecerá: el compilador seleccionará el método deseado dependiendo de si la llamada se hace desde un objeto constante o no (el tipo de argumento en tu ejemplo no importa).
Su objeto a no es una constante, por lo que el método sin const será llamado las tres veces. Si declaras un objeto como constante (A const a;), entonces se llamará a un método constante.
Vea cuál será el resultado:
Bien. )
En las tres variantes de la llamada es imposible entender si un argumento se pasa por valor o por referencia, por eso el compilador no puede elegir a qué función llamar. Y el modificador const las sobrecarga: void f(){} y void f() const {} son funciones diferentes. Si en tu ejemplo declaras uno de los métodos como const, entonces la incertidumbre desaparecerá: el compilador seleccionará el método deseado dependiendo de si la llamada se hace desde un objeto constante o no (el tipo de argumento en tu ejemplo no importa).
Su objeto a no es una constante, por lo que el método sin const será llamado las tres veces. Si se declara el objeto como constante (A const a;), entonces se llamará al método constante.
Todas las llamadas anteriores pasan sin problemas.
Mira lo que imprime:
Esto es de otro hilo.