Jaka jest redefinicja klasy w C ++ i jak to naprawić?

Jaka jest redefinicja klasy w C ++ i jak to naprawić?

Kiedy programista próbuje zdefiniować klasę o tej samej nazwie, co już istnieje, jest znana jako „Redefinicja klasy”. Program może zachowywać się nieoczekiwanie w wyniku tego, ponieważ nie będzie jasne, która klasa jest wywoływana, co może powodować problemy z kompilacją.

Przyczyny przedwczerowania błędów klas

Aby upewnić się, że oprogramowanie działa bez usterki, ważne jest, aby zrozumieć, co wyzwala redefinicje klasy i jak je rozwiązać.

1: Ta sama klasa zdefiniowana więcej niż raz

Gdy klasa jest zadeklarowana więcej niż raz w pliku źródłowym lub pliku nagłówka, należy ją na nowo zdefiniować. Wynika z tego kilka definicji tej samej klasy, co utrudnia kompilatorowi wybranie definicji użycia. Podczas próby połączenia plików obiektowych może to prowadzić do problemów z kompilacją, takimi jak „Duplikat symboli” lub błędy linkera.

2: Na nowo zdefiniuj tę samą klasę z podobnymi poleceniami i wartościami

Ponieważ programiści zazwyczaj na nowo zdefiniują tę samą klasę z podobnymi poleceniami i wartościami, Redefiniowanie klasy Występuje błąd C ++. W rezultacie system nie może rozróżniać dwóch skryptów, co prowadzi do redefiniowania zmiennych w licznych wierszach kodu C ++.

3: Budowanie klasy w wielu plikach

Ponadto programiści mogą wpaść na problemy z redefinicją klas podczas budowania klasy w wielu plikach, co może spowodować kilka błędów z powtarzających się działań. Na przykład, ponieważ system rozpoznaje swoje modyfikacje, monit C ++ dla konstruktora redefinicji musi zawierać charakterystyczne wartości i znaczniki.

Zagłębmy się w redefinicję błędów klasowych w programie C ++, który pokazano poniżej:

#włączać
za pomocą przestrzeni nazw Std;
klasa 1
publiczny:
dane int;
void func ()
Cout << "Hello from Func!" << endl;

;
klasa 1
publiczny:
dane int;
void func ()
Cout << "Hello again from Func!" << endl;

;
int main ()
Klasa 1 OBJ;
obj.Dane = 50;
obj.Func ();
powrót 0;

W powyższym kodzie otrzymujemy błąd „Redefinicja klasy 1”. Zgodnie z tym komunikatem o błędzie próbujemy na nowo zdefiniować klasę Klasa 1 używając tej samej nazwy, tego samego zbioru elementów danych i tego samego zestawu funkcji członka.

Wyjście

Aby przezwyciężyć redefinicję klasy w C ++, musisz usunąć klasę o tej samej nazwie lub nadać jej inną nazwę.

Poprawiony kod

Tutaj usunęliśmy klasę o tej samej nazwie, aby uzyskać pożądane wyjście w konsoli.

#włączać
za pomocą przestrzeni nazw Std;
klasa 1
publiczny:
dane int;
void func ()
Cout << "Hello from Func!" << endl;

;
int main ()
Klasa 1 OBJ;
obj.Dane = 50;
obj.Func ();
powrót 0;

Klasa Klasa 1 jest zdefiniowany przez kod, który obejmuje również funkcje członkowskie FUNC i Data (). Program tworzy obiekt typu klasa 1, ustawia wartość danych i wywołuje metodę func ().

Wyjście

Jak naprawić błąd „redefinicja klasy”

Naprawić Redefinicja klasy W C ++ można zastosować niektóre podejścia.

1: Zidentyfikuj, gdzie klasa jest na nowo zdefiniowana

Znalezienie obszarów, w których klasa jest na nowo zdefiniowana, jest pierwszym krokiem. Aby to zrobić, wyszukaj nazwę klasy w kodzie programu. Programista może wybrać sposób rozwiązania problemu po ustaleniu lokalizacji problemu. Zmienianie klasy za pomocą charakterystycznego sufiksu lub prefiksu to jedno podejście do problemu. Inną opcją jest połączenie dwóch klas w jedną klasę, która ma jedną nazwę i zawiera każdą funkcję dwóch oryginalnych klas.

2: Dokonaj zmian w kodzie programu

Programista musi zmienić kod programu, aby zastosować lekarstwo. Może to wymagać zmiany nazwy klasy, aktualizacji odniesień do klasy i zastąpienia dowolnego kodu, który był unikalny dla klasy oryginalnej. Oprogramowanie powinno zostać przetestowane po dokonaniu modyfikacji, aby upewnić się, że funkcjonuje poprawnie.

3: Użyj strażników nagłówka

Korzystanie z strażników nagłówków to kolejna preferowana metoda zapobiegania uwzględnieniu plików nagłówkowych więcej niż raz w jednym pliku lub aplikacji. Strażnicy nagłówków to dyrektywy preprocesor, które gwarantują, że plik nagłówka jest uwzględniony tylko raz, bez względu na to, jak często pojawia się w kodzie źródłowym.

4: Użyj słowa kluczowego zewnętrznego

Inną strategią jest zadeklarowanie klasy w pliku nagłówka i zdefiniowanie jej w jednym pliku źródłowym za pomocą słowa kluczowego zewnętrznego. W rezultacie unika się przedefiniowania błędów, ponieważ istnieje tylko jedna definicja klasy.

5: Korzystanie z przestrzeni nazwisk

Korzystanie z przestrzeni nazw to kolejne rozwiązanie dla Redefiniowanie klasy Błąd w c++. Korzystanie z przestrzeni nazw umożliwia programistom ujednolicenie podobnych klas i metod pod jedną nazwą. W ten sposób konflikty nazwy są zmniejszone, a właściwa klasa jest nazywana. Programista może zapobiegać konfliktom nazwy, deklarując każdą klasę w unikalnej przestrzeni nazw.

Wniosek

Redefinicja klasy W programowaniu C ++ jest częstym błędem, którego można łatwo uniknąć, identyfikując klasę, wprowadzając zmiany w kodzie, wykorzystując osłony nagłówków, słowo kluczowe i przestrzeni nazw zewnętrznych. Podejścia te pomagają zagwarantować, że klasa ma jedną definicję, unikając kompilacji i łączenia problemów.