1 / 2
Jul 2016

Witam. Nie znalazłem niestety odpowiedniego wątku co do tego tematu, ale zauważyłem, że kilka osób pisało już tutaj o swoich problemach. Zatem do rzeczy. Od jakiegoś czasu przerabiam książkę Bjarne Stroustrup'a i zatrzymałem się na zasadzie ODR. Stroustrup opisuje to tak13. W pierwszym pliku podany jest prawidłowy przykład, zaś na kolejnym screenshot'cie dwa błędne. Napiałem podobnie klasy o tych samych nazwach lecz innych nazwach składowych w osobnych plikach .cpp -> screeny tutaj5. Niestety, gdy napisałem nawet testowe funkcje, żaden błąd podczas kompilacji nie wyskakuje tak jak to opisał autor książki. Autor pisze także o różnych problemach które mogą wystąpić - cyt. "Wykrywanie niespójnych definicji klas w różnych jednostkach translacji jest poza zasię-giem możliwości większości implementacji języka C++. W konsekwencji deklaracje łamiące zasadę ODR mogą być źródłem subtelnych błędów.". Właśnie zastanawiam się jakich błędów i jak to jest z duplikatem klasy o tej samej nazwie w innym pliku i o inaczej nazwanych składowych. Proszę o jakąś pomoc :wink: Z góry dzięki za odpowiedź. Pozdrawiam.

  • created

    Jul '16
  • last reply

    Jul '16
  • 1

    reply

  • 839

    views

  • 2

    users

  • 1

    like

  • 2

    links

No właśnie takich, bardzo subtelnych, ...
Które mogą nawet nie wystąpić.
Które mogą zależeć od tego co programujesz [i projektujesz], tzn chcesz wykorzystać swoją klasę ale nieopacznie nazwałeś ją dokładnie tak samo, jak klasa istniejąca w bibliotece, z której korzystasz. I teraz pytanie, co kopilator wstawi do twojego kodu? Jak bardzo różnią są te obie klasy, bo jeżeli działają identycznie, to możliwe, że nawet nie będzie aż tak dużego problemu.

Czyli jedyny problem z zasadą ODR jest taki, że kompilator nie ostrzega przed przypadkiem nieprzestrzegania tej zasady przez programistę [kodera]. A więc trzeba samemu pilnować i przestrzegać tej zasady - nie używać tekiej samej nazwy do nazywania dwóch różnych rzeczy [dwóch różnych-podobnych, klas].

Niesteety ani nikt, ani nic nie jest doskonałe [kompilatory też].

PS
Co do działu, mógłby być jakiś lepszy, ale jak widać, "nasi" admini też są bardzo niedoskonali. Można ich przyciskać i prosić o dodanie innych działów, pisząc na contact@spoj.com bo tutaj wygląda, że nie zaglądają, czemu się wcale nie dziwię.

Suggested Topics

Want to read more? Browse other topics in Tutoriale, poradniki or view latest topics.