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:

In function `int main(int, char**)':
`jakas_zmienna' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)

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ć.

invalid conversion from `int' to `HWND__*'

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.

too few arguments to function `LONG SetWindowLongA(HWND__*, int, LONG)'

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.

uninitialized const `stala_zmienna'

Informacja, że nie inicjujemy stałej, którą powinniśmy zainicjować. Mamy podane jaka to stała.

assignment of read-only variable `stala_zmienna'

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.

plik_naglowkowy.h: No such file or directory.

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.

[Linker error] undefined reference to `InitCommonControls@0'
ld returned 1 exit status

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.

Wejść na stronę:     Ilość osób online:
Prawa autorskie © 2008 crayze. Wszelkie prawa zastrzeżone.
crayze7@gmail.com