
W tej lekcji powiemy sobie kilka słów na temat komunikatów debugerra kompilatora Dev C++ ver. 4.9.9.2, czyli błędów w składni języka C++ napotkanych podczas kompilacji. Kiedy zaczyna sie programować i zaczyna pisać swoje algorytmy, problemem dla programisty jest to aby w ogóle skompilować program. Na początku przygody z programowaniem, kiedy cały czas przyswajamy sobie składnię(zasady) języka C++, ciągle popełniamy błędy w kodzie, przez które nie możemy skompilować programu. Gdy już dojdziemy do wprawy w posługiwaniu się C++, także robimy błędy, może nie aż tak często, to literówki czy nieuwaga zdarzają się każdemu. Dobrze znać i rozumieć błędy jakie pojawiają się w okienku debugerra.
Gdy debugger natrafi na błąd, przerwie kompilację przeskoczy kursorem do linijki z błędem i podświetli ją na ciemny czerwony kolor. Na dole okna Dev'a pojawi nam się pole w którym będą opisane błędy jakie napotkał.
Przejdźmy zatem do pierwszego, chyba najczęściej wyświetlanego błędu:
Każdy log błędów musi być poprzedzony tym, w jakiej funkcji wystąpił. Komunikat ten będzie rozpoczynał się "In function"(w funkcji), w moim przypadku jest to funkcja "int main", a w nawiasie podane są jej parametry. W drugiej linijce mamy informację bezpośrednio o błędzie, czyli słowa "`jakas_zmienna' undeclared (first use this function)", czyli debugger nie wie co to jest "jakas_zmienna", a użyliśmy tego w kodzie. Przyczyn wystąpienia tego błędu może być wiele. Najczęściej jest to spowodowane tym, że zrobiliśmy jakąś literówkę w tym wyrazie i kompilator nie wie co to jest za wyrażenie. Możliwe także, że np. zapomnieliśmy to wcześniej zadeklarować(utworzyć w pamięci), a próbujemy coś z tym zrobić, jeżeli jest to funkcja, to być może nie dołączyliśmy pliku nagłówkowego, który zawiera definicję tej funkcji. Jeżeli jest to nasza funkcja, możliwe że jej ciało umieściliśmy za miejsce, w którym próbujemy jej użyć, a wcześniej nie napisaliśmy jej zapowiedzi. Przyczyn może być wiele, natomiast, debugger zgłaszając ten błąd, nie wie co ten wyraz oznacza i musimy ustalić dlaczego tak się dzieje i to poprawić.
W tym błędzie debugger powiadamia nas, że parametry najczęściej w funkcji się nie zgadzają i zachodzi potrzeba konwersji ich. Możemy to zrobić poprzez rzutowanie, jeżeli przyniesie to pożądany efekt. W komunikacie dodatkowo mamy informację, że problem dotyczy miejsca w którym my podajemy wartość typu int, natomiast kompilator spodziewa się wartości typu *HWND.
Tym komunikatem kompilator powiadamia nas, że ilość podanych parametrów do funkcji nie zgadza się z definicją funkcji. W takim wypadku trzeba to poprawić. W komunikacie mamy także, informację w jakiej funkcji popełniono błąd, oraz jej deklarację, czyli jakich parametrów spodziewa się funkcja.
Informacja, że nie inicjujemy stałej, którą powinniśmy zainicjować. Mamy podane jaka to stała.
Ten błąd oznacza, że chcemy przypisać wartość jakiejś stałej, oczywiście taka operacja jest niepoprawna, dlatego pojawi się ten błąd. Mamy także informację, jakiej stałej dotyczy błąd.
Ten komunikat informuje nas, że nie odnaleziono pliku który dołączamy dyrektywą #include. Należy sprawdzić, czy dobrze napisaliśmy nazwę, ewentualnie czy plik istnieje, oraz czy jest w katalogu, w którym kompilator wyszukuje pliki nagłówkowe.
Gdy pojawi się ten błąd oznacza, że linker nie może znaleźć funkcji o podanej nazwie, w naszym przypadku InitCommonControls(), w bibliotece statycznej. Dzieje się tak gdy w projekcie korzystamy z plików nagłówkowych, których linker automatycznie nie dołącza odpowiednich bibliotek, musimy dowiedzieć się w jakiej bibliotece statycznej(a rozszerzeniem *.a lub *.lib) przechowywana jest funkcja i dołączyć ją do naszego projektu. W przypadku funkcji z WinAPI, dokumentację, a więc i informacje o bibliotece, można znaleźć w msdn.