Niezgodność typów oznacza sytuację, w której program używa wartości jednego typu tam, gdzie wymagany jest inny typ. Kompilator może wtedy zgłosić błąd typu incompatible types, czyli „niezgodne typy”.
Najczęściej dzieje się to w językach ze sprawdzaniem typów, np. Java, C#, C++ lub TypeScript. Kompilator analizuje kod przed uruchomieniem programu i sprawdza, czy operacje są wykonywane na poprawnych typach danych.
Przykład
void wyswietlWiek(int wiek) {
System.out.println(wiek);
}
wyswietlWiek("osiemnaście"); // błąd: oczekiwano int, przekazano String
Funkcja wyswietlWiek oczekuje argumentu typu int, ale otrzymuje napis (String). To klasyczny przykład błędu incompatible types.
Kiedy może wystąpić?
- przekazanie argumentu złego typu do funkcji lub metody,
- przypisanie wartości niewłaściwego typu do zmiennej,
- zwrócenie z funkcji wartości innego typu niż zadeklarowany,
- użycie operatora dla typów, które nie pasują do danej operacji.
Co nie jest niezgodnością typów?
Przypisanie liczby 243 do zmiennej typu int jest poprawne, bo wartość pasuje do typu:
int liczba = 243; // poprawnie
Wywołanie funkcji zwracającej void bez przypisywania wyniku do zmiennej także jest poprawne, ponieważ void oznacza brak zwracanej wartości.
Jak naprawić błąd?
Należy użyć wartości odpowiedniego typu albo wykonać poprawną konwersję, jeśli język na to pozwala. Nie każdą wartość da się jednak bezpiecznie zamienić na inny typ.