Оголошення члена з неоднозначним іменем у похідному класі не є помилкою. Неоднозначність позначається як помилка, лише якщо ви використовуєте неоднозначне ім’я члена. Наприклад, припустимо, що обидва класи з іменами A і B мають член з іменем x , а клас з іменем C успадковує як A, так і B .
Іноді може виникнути ситуація перевантаження функцій коли компілятор не може вибрати між двома правильно перевантаженими функціями. Ця ситуація називається неоднозначною. Неоднозначні оператори є операторами, що генерують помилки, і програми, що містять неоднозначність, не компілюються.
Щоразу, коли ви бачите помилку компілятора, яка говорить про те, що щось неоднозначне, це зазвичай означає це ви відкрили деякі простори імен (тобто використовуючи простір імен std;) та інші простори імен, а cout визначено в обох просторах імен. Це означає, що воно неоднозначне, компілятор не знає, яке визначення ви маєте на увазі.
Виклик перевантаженої функції буде неоднозначним завдяки автоматичному перетворенню типів. Неоднозначність можна усунути шляхом приведення аргументу, видалення функції неоднозначності або зміни аргументів.
У C++ неоднозначність перевантаження функцій – це ситуація, яка виникає, коли компілятор не може вибрати для виконання одну функцію з усіх перевантажених функцій. Це відбувається переважно під час передачі чисел з плаваючою комою як змінних до перевантаженої функції.
Неоднозначність позначається як помилка, лише якщо ви використовуєте неоднозначне ім’я члена. Наприклад, припустимо, що обидва класи з іменами A і B мають член з іменем x , а клас з іменем C успадковує як A, так і B . Спроба отримати доступ до x із класу C була б неоднозначною.