Jak dołączać pliki nagłówkowe?

0

Próbuje nauczyć się programować obiektowo w c++ z poradnika. Z tego co jest w nim to jak mamy main.cpp event.cpp i event.h to w main.cpp piszą by ddolinkować event.cpp. Zaś w pliku event.cpp trzeba dolinkować plik nagłówkowy.

Tak zrobiłem i program ni jak nie chciał się skompilować, był nawet skopiowany żywcem i nadal nic. Wyskakiwał błąd

undefined reference to

Skasowałem z event.cpp link do plika nagłówkowego, zaś do maina dolinkowałem event.h. O dziwo zadziałało.

Teraz chce się dowiedzieć, co jest nie tak. Czy w przykładzie był błąd i trzeba wszystko dolinkowywać do pliku głównego, czy co? Dosłownie głupieje...

Czyli jak poprawnie dzielić program na kilka plików źródłowych. Przejrzałem dwie, trzy strony i tam jest tak jak w przykładzie, ale jak stosuje się do przykładu to nie działa... Proszę będę wdzięczny za wytłumaczenie tej prostej rzeczy takiemu cymbałowi, jak mi :D

3
Plazma napisał(a):

w main.cpp piszą by ddolinkować event.h.

Tak zrobiłem i program ni jak nie chciał się skompilować

... zaś do maina dolinkowałem event.h.

Sam sobie zaprzeczasz, bo z drugiego zdania wynika, że w main.cpp masz już #include "event.h", natomiast z trzeciego wynika że wcale nie.

Generalnie odnoszę wrażenie, że się zamotałeś i nie wiedziałeś co robisz, ale bez kodu źródłowego trudno jednoznacznie stwierdzic.

0

main.cpp

 #include <iostream>
#include "event.h"
#include "event.cpp"

event.cpp

#include <iostream>
//#include "event.h" 

event.h
#include <iostream>

Przejęzyczyłem się, jak pisałem posta :D Przepraszam. Obecnie tak to wygląda, jak powyżej. Czyli zaczęło to działać, jak dopisałem event.cpp do maina i gdy zakomentowałem w pliku event.cpp #include "event".h".

Chodzi mi, jak dołączać pliki nagłówkowe i źródłowe.

Pierwotnie było:

main.cpp

 #include <iostream>
#include "event.h"

event.cpp

#include <iostream>
#include "event.h" 

event.h
#include <iostream>

W sumie, jak to napisałem to widzę błąd, event.cpp w ogóle nie był dołączony do tego wszystkiego.

4

Nigdy (*) nie powinno się dołączac plików .cpp. To co masz to błąd.

Pierwotna wersja była prawidłowa, natomiast nie działało bo (zgaduję) nie dołączyłeś pliku event.cpp do projektu.

(*) - istnieją kontrowersyjne wyjątki, ale na razie się nimi nie przejmuj.

0

Prawdę mówiąc, po prostu stworzyłem te trzy pliki, bez tworzenia projektu. Czyli mam tworzyć projekt i wtedy działać. Z ciekawości się spytam, dlaczego tak to jest skonstruowane? Dlaczego muszę tworzyć specjalnie projekt, a nie mogę po prostu tworzyć 3 plików? Już wiem, że to nie zadziała dobrze, ale dlaczego tak jest, ze trzeba robić projekt. Co w tym projekcie jest takiego?

0

Każdy plik można skompilowac osobno, bez projektu to jak kompilator ma zgadnąc, że to czego używasz istnieje w jakimś innym pliku?
O pliku nagłówkowym może zgadnąc, bo masz include ale skąd ma wiedziec o innym pliku cpp.

2

Nie musisz tworzyć projektu. Musisz powiedzieć kompilatorowi (konkretnie - linkerowi), że w pliku event.cpp znajdują się definicje symboli których chcesz używać. Tworzenie projektu to tylko abstrakcja nad tym, ułatwienie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1