2013-07-09 16 views
8

Powiedz, że mam tę funkcję o nazwie DoThis (const char * abc) w pliku o nazwie one.cpp. Więc kiedy próbuję wywołać tę funkcję z innej funkcji w innym pliku źródłowym (dwa.cpp), pojawia się błąd: błąd LNK2001: nierozwiązany symbol zewnętrzny (C++), mimo że użyłem #include "one.h" Co by było Mam to naprawić?błąd LNK2001: nierozwiązany symbol zewnętrzny (C++)

+0

Jest również zdefiniowany w one.h – Enigma

+0

Funkcja DoThis jest zdefiniowana w nagłówku. – user2549990

+0

są oba pliki powiązane z projektem? – Enigma

Odpowiedz

11

Oznacza to, że definicja twojej funkcji nie występuje w twoim programie. Zapomniałeś dodać tego one.cpp do swojego programu.

To, co "dodać" w tym przypadku, zależy od środowiska kompilacji i jego terminologii. W MSVC (ponieważ najwyraźniej używasz MSVC), musisz dodać one.cpp do projektu.

W bardziej praktycznych kategoriach, odnoszących się do wszystkich typowych metod budowania, po połączeniu programu brakuje pliku obiektu utworzonego z formularza one.cpp.

+0

Ale co, jeśli powiesz, że mój plik jest plikiem tylko nagłówkowym, powoduje jego abstrakcyjną klasę? Przepraszam, że wykopię stary post :) –

+0

@Niklas Vest: Jeśli wszystko jest tam, w nagłówku, kompilator/linker powinien być w stanie znaleźć wszystko bez żadnych problemów. To znaczy. LNK2001 po prostu się nie pojawi. Umieszczanie nieodpowiednich rzeczy w plikach nagłówków zwykle zwiększa ryzyko LNK 2005, które znajduje się na drugim końcu spektrum: zbyt wiele definicji. – AnT

3

Wygląda na to, że używasz Microsoft Visual C++. W takim przypadku największa możliwość polega na tym, że nie kompilujesz pliku two.cpp z plikiem one.cpp (one.cpp jest implementacją dla jednego.h).

Jeśli jesteś z linii poleceń (cmd.exe), a następnie spróbuj ten pierwszy: cl -o two.exe one.cpp two.cpp

Jeśli jesteś z IDE, kliknij prawym przyciskiem myszy na nazwę projektu z Solution Explore. Następnie wybierz Dodaj, Istniejąca pozycja .... Dodaj jeden.cpp do swojego projektu.

Powiązane problemy