Połączenie błędu przeciążonego jest niejednoznaczne

Połączenie błędu przeciążonego jest niejednoznaczne
W tym artykule omówimy błąd występujący w języku C ++, który jest przeciążony, jest niejednoznaczny. Ten błąd nie wpływa na sposób uruchamiania kodu, ponieważ występuje w czasie kompilacji. Musimy wiedzieć, co to jest przeciążenie. Podczas przeciążenia deklarujemy funkcje o tych samych nazwach, ale różnymi danych. System rozróżnia funkcje ze względu na ich danych. Niejednoznaczne odnosi się do wielu znaczeń lub podobieństw. Pod innymi względami możemy powiedzieć, że niejednoznaczne oznacza niejasne. Więc błąd się wyjaśnia.

Błąd występuje, gdy funkcja przeciążająca kompilator interpretuje funkcje jako pojedyncza funkcja i nie może zmienić dwóch przeciążonych funkcji na podstawie ich danych. Możemy więc powiedzieć, że ten błąd występuje z powodu niezdolności kompilatora do dokonania wyboru między dwiema słusznie przeciążonymi metodami. Mówi się, że cały ten proces jest niejednoznaczny, ponieważ nie jest jasne. Kody i programy zawierające takie dwuznaczności nie mogą skompilować i ostatecznie generować błędów.

Składnia

To nie jest wbudowana funkcja ani biblioteka, o której omawiamy, raczej jest to błąd, a błąd nie ma określonej składni. To jest wiadomość, którą kompilator zwraca, gdy otrzymamy nasz błąd.

Błąd: wywołanie przeciążonego „setval (int)” jest niejednoznaczne

Uwaga: słowo „setval (int)” nie jest stałe.

Przykład nr 01:

Aby lepiej zrozumieć nasz błąd, wykonamy teraz przykład, aby uzyskać błąd, a następnie rozwiązamy błąd. Aby to zrobić, zadeklarowaliśmy klasę o nazwie Class1. W klasie 1 zadeklarowaliśmy prywatne dane o niepodpisaniu [bajty]. W sekcji publicznej naszej klasy zadeklarowaliśmy dwie funkcje o tej samej nazwie „samefunc”. Ale przekazaliśmy „bez znaku INT” jako parametr, a „const char” na drugie jako parametr, abyśmy mogli przeciążyć metody, mając te same nazwy i różne dane dotyczące parametrów jako parametry. W pierwszym „sameFunc” wydrukowaliśmy „int” z przekazaną do niego wartością. W drugiej funkcji wydrukowaliśmy „char” z wartością przekazaną do naszej drugiej funkcji. Przy użyciu obiektu w naszej klasie nazwaliśmy metodę główną metodą. Teraz wykonamy nasz kod, aby zobaczyć, co się stanie.

#włączać
#określić bajty 8
za pomocą przestrzeni nazw Std;
klasa 1

prywatny:
Dane o charakterze niepodpisanym [bajty];
publiczny:
void samefunc (int);
void samefunc (const char *);
;
void class1 :: samefunc (int t)

Cout<<"int"<
void class1 :: samefunc (const char *s)

Cout<<"char"<
int main ()
klasa 1 p;
P.sameFunc (0);
powrót 0;

Po wykonaniu naszego kodu system przekazał nam komunikat o błędzie. Jeśli spojrzymy na komunikat o błędzie, zobaczymy, że wiadomość jest prawie taka sama, jak wcześniej omówiliśmy. Jedyną różnicą jest nazwa funkcji. Powiedzieliśmy ci wcześniej, że nazwa funkcji będzie się zmieniać w zależności od tego, co zadeklarowałeś jako nazwę swojej funkcji. W każdym razie system dał nam błąd, że „wywołanie przeciążenia jest niejednoznaczne”. Powstaje pytanie, że przekazaliśmy „0” do naszej funkcji, a „0” jest liczbą całkowitą, dlaczego system dał nam ten błąd? Wykopajmy powód i spróbuj rozwiązać błąd.

Teraz, aby rozwiązać błąd, nie będziemy ponownie ponownie przepisać całego naszego kodu, po prostu usunęliśmy słowo kluczowe „niepodpisane” przed „int” w naszej pierwszej funkcji. Następnie wykonaliśmy nasz kod, a kod został pomyślnie wykonany.

Błąd został spowodowany, ponieważ wartość „0” ma dwa znaczenia w języku C ++. Po pierwsze, jest to liczba całkowita. Po drugie, w przypadku postaci jest to zerowa stała wskaźnika. Kompilator nie był w stanie w naszym przypadku zdecydować, czy nasz parametr wejściowy był liczbą całkowitą, czy zerową stałą. Używaliśmy dwóch danych dla naszych metod int i char. Więc kompilator był zdezorientowany. Po usunięciu słowa kluczowego kompilator wziął parametr jako liczbę całkowitą i wykonał funkcję za pomocą danych liczb całkowitych.

Przykład nr 02:

Aby lepiej zrozumieć, że omawiany jest błąd. Wykonaliśmy kolejny przykład tutaj. W tym przykładzie zadeklarowaliśmy dwie metody o tych samych nazwach „AddVals”. Ale różnica między dwiema funkcjami polega na tym, że jedno przyjmuje liczby całkowite jako parametry wejściowe, a druga przyjmuje pływaki jako parametry wejściowe. Obie metody mają ten sam cel, przyjmują parametry wejściowe i podsumowują swoje wartości. W głównej metodzie wydrukowaliśmy wynik po przeprowadzeniu operacji na naszych parametrach wejściowych. Wykonamy nasz kod, aby sprawdzić wyjście.

#włączać
za pomocą przestrzeni nazw Std;
int addvals (int x, int y)

zwrócić x+y;

int addvals (float x, float y)
zwrócić x+y;

int main ()
Cout<powrót 0;

Po raz kolejny system nie dał nam żadnego wyjścia. Zamiast tego rzucił komunikat o błędzie. Komunikat o błędzie znów jest taki sam jak poprzedni. Ale nazwa funkcji jest inna. W takim przypadku przekazaliśmy wartości „1.2 ”i„ 3.4 ”do naszej funkcji, która jest jasna, że ​​wartości te są pływakami. Pytanie może pojawić się, dlaczego system nie wykonał swojego zadania i dał nam błąd. Aby uzyskać powód, postaramy się rozwiązać błąd i dzięki temu otrzymamy również naszą odpowiedź.

Teraz, aby rozwiązać błąd, który wprowadziliśmy „1.2f ”i„ 3.4f ”z naszymi parametrami. Ponownie wykonamy kod, aby sprawdzić, czy to podejście pomaga w rozdzielczości naszego błędu, czy nie. Ponownie wykonajmy nasz kod, aby zobaczyć, co się stanie.

Tym razem system nie dał nam żadnego błędu i pomyślnie wykonał nasz kod. Problem w naszym kodzie polegał na tym, że nie wprowadzaliśmy „F” w naszych parametrach. Zakładaliśmy, że kompilator odczytał je jako wartości pływakowe zamiast liczb całkowitych. Ale myliliśmy się, ponieważ kompilator identyfikuje wszystkie pływaki jako podwójne początkowo, chyba że umieścimy „F” jako sufiks. Po umieszczeniu naszego przyrostka kod został pomyślnie skompilowany.

Wniosek

W tym przewodniku omówiliśmy inny błąd, który jest „wywołanie przeciążenia (funkcja) jest niejednoznaczne”. Omówiliśmy, dlaczego występuje błąd. Omówiliśmy także koncepcję przeciążenia funkcji, aby lepiej zrozumieć nasz błąd. Przykłady zostały wykonane, aby pomóc Ci uzyskać lepszą przyczepność do rozwiązania błędu.