chamada ambígua para função sobrecarregada com os mesmos 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 exemplo de fonte idiota levou muito tempo a ser criado. O meu sentido de humor quase desapareceu enquanto eu o criava.
(risos) Está bem. )
Em todas as três versões da chamada é impossível compreender se o argumento é passado por valor ou por referência, pelo que o compilador não pode escolher qual a função a chamar. E o modificador const {} sobrecarrega-as: f(){} e f() const {} vazias são funções diferentes. Se no seu exemplo declarar um dos métodos como constante, então a incerteza desaparecerá: o compilador seleccionará o método desejado dependendo se a chamada é feita a partir de um objecto constante ou não (o tipo de argumento no seu exemplo não importa).
O seu objecto a não é uma constante, por isso o método sem const const será chamado as três vezes. Se declarar um objecto como constante (A const a;), então será chamado um método constante.
Veja qual será a produção:
class A
{
public:
void func() {Print("Non const");}
void func() const {Print("Const");}
};
voidOnStart()
{
A a;
A const b;
a.func();
b.func();
}
Nas três variantes da chamada é impossível compreender se um argumento é passado por valor ou por referência, por isso é que o compilador não pode escolher que função chamar. E o modificador const {} sobrecarrega-as: f(){} e f() const {} vazias são funções diferentes. Se no seu exemplo declarar um dos métodos como constante, então a incerteza desaparecerá: o compilador seleccionará o método desejado dependendo se a chamada é feita a partir de um objecto constante ou não (o tipo de argumento no seu exemplo não importa).
O seu objecto a não é uma constante, por isso o método sem const const será chamado as três vezes. Se declarar o objecto como constante (A const a;), então o método constante será chamado.
Tê-lo-ia executado primeiro. O erro é SOMENTE aqui
constint i2 = 0;
a.func(i2); // 'func' - ambiguous call to overloaded function with the same parameters
Todas as chamadas antes disso são efectuadas sem qualquer problema.
Que valores de spread produz a funçãoCopySpread() para o período gráfico correspondente?
Não é claro se é a média, mínima ou máxima, e a ajuda da função não diz nada sobre isso.
Que valores de spread produz a funçãoCopySpread() para o período gráfico correspondente?
Não é claro se é a média, mínima ou máxima, e a ajuda da função não diz nada sobre isso.
onde, na conta ou no testador
chamada ambígua para função sobrecarregada com os mesmos parâmetros
Será isto um mal-entendido ou um insecto?
É o meu mal-entendido ou um insecto?
chamada ambígua para função sobrecarregada com os mesmos parâmetros
Será isto um mal-entendido ou um insecto?
Mal-entendido.
Bem, é isso, já lhe respondi. ))))
Na minha opinião, este código deve comportar-se da mesma forma em ambos os casos.
É o que eu também penso.
Mal-entendido.
Bem, é isso, já respondi. ))))
Esse estúpido exemplo de código fonte levou muito tempo a ser criado. O meu sentido de humor quase desapareceu enquanto eu o criava.
Este exemplo de fonte idiota levou muito tempo a ser criado. O meu sentido de humor quase desapareceu enquanto eu o criava.
(risos) Está bem. )
Em todas as três versões da chamada é impossível compreender se o argumento é passado por valor ou por referência, pelo que o compilador não pode escolher qual a função a chamar. E o modificador const {} sobrecarrega-as: f(){} e f() const {} vazias são funções diferentes. Se no seu exemplo declarar um dos métodos como constante, então a incerteza desaparecerá: o compilador seleccionará o método desejado dependendo se a chamada é feita a partir de um objecto constante ou não (o tipo de argumento no seu exemplo não importa).
O seu objecto a não é uma constante, por isso o método sem const const será chamado as três vezes. Se declarar um objecto como constante (A const a;), então será chamado um método constante.
Veja qual será a produção:
Bom. )
Nas três variantes da chamada é impossível compreender se um argumento é passado por valor ou por referência, por isso é que o compilador não pode escolher que função chamar. E o modificador const {} sobrecarrega-as: f(){} e f() const {} vazias são funções diferentes. Se no seu exemplo declarar um dos métodos como constante, então a incerteza desaparecerá: o compilador seleccionará o método desejado dependendo se a chamada é feita a partir de um objecto constante ou não (o tipo de argumento no seu exemplo não importa).
O seu objecto a não é uma constante, por isso o método sem const const será chamado as três vezes. Se declarar o objecto como constante (A const a;), então o método constante será chamado.
Todas as chamadas antes disso são efectuadas sem qualquer problema.
Veja o que se imprime:
Isto é de outro fio.