problem z .obj

0

Czy ktoś może mi powiedzieć jak to jest z tymi plikami .obj?
Mam kilka funkcji, umieszczonych w plikach x.cpp, x.h. Po dołączeniu do programu #include x.h oraz użyciu którejś z funkcji z pliku x.h program się kompiluje, ale przy uruchamianiu wyskakuje błąd Unresolved external ... referenced from ...
Co najgorsze kilka dołączonych funkcji działa, a kilka nie.

0

bez konkretnego przykładu trudno jest pomóc . pokaż kod , wtedy sie pomyśli

0

bez konkretnego przykładu trudno jest pomóc . pokaż kod , wtedy sie pomyśli

Chodzi mi o dołączanie osobnych plików z kodem za pomocą #include.
Wszystko chodzi, gdy dodam te pliki do projektu, ale gdy korzystam tylko z #include wyskakują błędy. Wiem mniej więcej, że chodzi coś o pliki .obj.
Przykład:
Mam plik x.cpp:
int test()
{
return 5;
}

oraz x.h
#ifndef tt
#define tt
int test();
#endif

Zapisuję je na dysk i otwieram nowy projekt.
w projekcie dodaję:
#include x.h

kompiluję, uruchamiam: ok!

ale teraz dodaję linijkę:
test();
kompiluję: ok
uruchamiam: błąd: Unresolved external... referenced from...

0

masz plik : x.cpp , w którym jest zdefiniowana funkcja test() , a do tego masz plik x.h , w którym jest tylko zadeklarowana ( jej prototyp ) . tworzysz sobie potem jakis projekt i do tego projektu dodajesz , poprzez include , plik x.h . wszystko jest niby ok . kompilujesz , wszystko sie kompiluje , bo powinno . dodajesz linijke test(); , wszystko sie kompiluje ok , bo kompilator sprawdza czy jest taka funkcja w kodzie i ją znajduje , bo jej deklaracja jest w pliku : x.h , który includowałeś . Ale to jest TYLKO deklaracja , nie definicja , więc wszystko sie pieprzy jak program przy wykonaniu próbuje wykonać funkcje , która nie została zdefinowana , a jednynie zadelkarowana .
Reasumując , wg mnie jest to spowodowane tym że nie zamieściłeś definicji funkcji test() w programie , program sie kompiluje bo jest deklaracja tej funkcji , a nie chce sie uruchamiać bo nie wie co ma zrobić po wywołaniu tej funkcji . tak myśle , ale moge sie mylić .
rozwiązanie :
plik x.h , może wyglądać tak :
#ifndef tt
#define tt
#include x.cpp
#endif

ale to jest troche bez sensu , ja bym od razu zamieścił w jednym pliku ( np. x.cpp ) definicje funkcji test , i potem w głównym kodzie napisał :
#include x.cpp , zawsze tak robie .

0

też zwykle pisze #include x.cpp, ale próbuję dowiedzieć się (tak tylko z ciekawości) jak to się robi z tym #include x.h.
Wiem już, że gdy plik x.cpp skompiluję do x.obj, to można na końcu pliku nagłówkowego (x.h) dopisać:
#pragma link "x" (gdzie ten iks to nazwa pliku bez rozszerzenia)
i wtedy wszystko jest ok (prawie, czasami nie wiem czemu nie działa)

0

plik a.cpp ma include b.h
plik b.cpp ma inlcude b.h

powstaje a.obj i b.obj.

pliki a.cpp/b.cpp/b.h powinieneś mieć w jednym projekcie

wtedy przy linkowaniu a.obj i b.obj zostaną połaczone

dzięki temu funkcje zadeklarowane w b.h będą widoczne w a.cpp, a ich definicje z b.cpp będą podlinkowane do wywołań w a.cpp - wszystko będzie ok

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