Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[VC++ 2010] Linker nie widzi funkcji...

Ostatnio zmodyfikowano 2012-01-26 19:31
Autor Wiadomość
Mrovqa
Temat założony przez niniejszego użytkownika
[VC++ 2010] Linker nie widzi funkcji...
» 2012-01-26 18:23:11
Witam!

Mam trochę dziwny problem... (przynajmniej dla mnie :P). Linker (nie wiem czemu) wywala mi coś takiego:
1>Debug\FileListing.obj : warning LNK4042: object specified more than once; extras ignored
1>FileInfo.obj : error LNK2019: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl md5(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?md5@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV12@@Z) referenced in function "public: bool __thiscall FileInfo::UpdateInfoFromFile(wchar_t const *)" (?UpdateInfoFromFile@FileInfo@@QAE_NPB_W@Z)
1>main.obj : error LNK2019: unresolved external symbol "public: bool __thiscall FileListing::AddToFileList(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,bool,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >)" (?AddToFileList@FileListing@@QAE_NV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@_N0@Z) referenced in function _main
1>D:\C++\My projects\testy itp\MrowqaUpdatePrototype\Debug\MrowqaUpdatePrototype.exe : fatal error LNK1120: 2 unresolved externals
(nie wiem czemu, ale wcześniej pod Release miałem tylko jeden błąd... bez zmiany kodu teraz mam dwa -_-' / pod Debug cały czas były oba błędy).
Co do ostrzeżenia linkera... o co chodzi z tym? Mam tylko jeden plik "FileListing.cpp", więc jakim prawem tworzy się kilka *.obj?

Wracając do problemu... Jest taki, że nie wiem, czemu wywala te błędy... IntelliSense normalnie widzi funkcje ;/ Nie wiem w czym mam błąd.
Oto moje "drzewko inkludowania" plików (skrócone, całe liczy aktualnie 30+ plików ;P):
----main.cpp
MrowqaUpdate.h

----MrowqaUpdate.h
FileListing.h
FileInfo.h
md5.h

----FileListing.cpp
FileListing.h

----FileInfo.cpp
FileInfo.h

----md5.cpp
md5.h
W plikach *.h są deklaracje rzekomo "brakujących" funkcji, w plikach *.cpp - ich definicje. O co z tym chodzi? -_-' Powinno działać! :/

/edit:
Nie wiem czemu, zawsze długo myślę i nic nie wymyślę, a jak wyśle na forum to znajduję odpowiedź :P Udało mi się zlikwidować problem z md5... Kodzik ściągnąłem z neta i zapomniałem definicji funkcji tam przerobić :P
Reszta jednak nie działa. Kompiluje się dopiero wtedy, gdy doinkluduję w main.cpp plik FileListing.cpp -_-'

Pozdrawiam,
Mrowqa
P-49517
pekfos
» 2012-01-26 19:01:15
Czyżby funkcje inline w pliku .cpp?
P-49519
Mrovqa
Temat założony przez niniejszego użytkownika
» 2012-01-26 19:31:18
Miałem funkcje inline (tak się zastanawiałem czy jest sens... bo jak zapakuje do DLLki to ich nie będzie prawdopodobnie ;P). Gdy skompilowałem i zobaczyłem błąd to wywaliłem od razu inline, ale to w innych funkcjach było - poprawione zanim ten temat powstał :P

Ta funkcja (co wywalała jeszcze error) jest metodą klasy zdefiniowaną po za definicją tej klasy (bo te w środku są inline). Teraz nie wiem czemu, ale Visual zaczął mi to linkować bez errorów -_-'
Dziwny jest ten Visual... z resztą - czego się spodziewać po M$ :D (Choć debugger to niezły zrobili :P)

/edit:
faktycznie dziwny ten Visual... robiłem rebuild main.cpp i działało... Edytowałem także plik z metodami rzekomej klasy - linkowało się...
Teraz:
1>main.obj : error LNK2019: unresolved external symbol "public: bool __thiscall FileListing::AddToFileList(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,bool,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >)" (?AddToFileList@FileListing@@QAE_NV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@_N0@Z) referenced in function _main
Znów błąd linkera, a jedyne co zrobiłem to przeniesienie jednej metody (z której nigdzie nie korzystam xD) z wnętrza klasy do pliku *.cpp ...

/edit2:
Rozgryzłem Visuala... gdy zrobię rebuild - wywala błąd linkera. Żeby się go pozbyć wystarczy najmniejsza zmiana w pliku z metodami (np. dodanie pustej instrukcji
;
) i dać Build (nie rebuild!). O dziwo działa wtedy... ale po kolejnym rebuildzie - już nie :/
Póki co - rozgryzłem to... ale sami przyznacie, że to nienaturalne... "Dziwny ten Visual..."

Pozdrawiam,
Mrowqa
P-49529
« 1 »
  Strona 1 z 1