Istnieje funkcja globalna (tylko przykład):Usuwanie przeciążonej funkcji. C++ 11. Call of przeciążony ... jest niejednoznaczny
void func(int i)
{
std::cout << i + 100 << std::endl;
}
Zakładam, że wywołanie tej funkcji z argumentem char nie ma sensu, więc używam usunięcia:
void func(char) = delete;
więc oczekiwać, że następujące połączenia powinno być możliwe:
func(1);
func(3.1);
func(true);
I zadzwonić z argumentu char powinny być zabronione:
func('a');
Ale to nie jest prawda. Dzwoniąc func('a')
uzyskać zgodnie z oczekiwaniami:
error: use of deleted function ‘void func(char)’
Ale podczas wywoływania func(2.3)
uzyskać:
error: call of overloaded ‘func(double)’ is ambiguous
Dlaczego mam ten błąd? Nie usuwając funkcji z argumentami char, zmieniono na int i wywołano func (int), dlaczego teraz jest zabronione?
_ "Dlaczego pojawia się ten błąd?" _ Czy wiesz, że 'char' może automatycznie zostać przekonwertowany na' int' i 'double'? – user0042
Wszystko, co masz po ** EDYCJI **, wydaje się być odpowiedzią na twoje pytanie. Jeśli to twoja odpowiedź, usuń ją z pytania i * opublikuj jako odpowiedź *. Jeśli, jak się wydaje, po prostu powtarzasz istniejący, nie publikuj duplikowanej odpowiedzi; po prostu usuń go ze swojego pytania. –