Linker error undefined reference to 'LineTo@12'

0
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 
 switch (msg)
 {
  case WM_LBUTTONDOWN:
  {
   HDC hdc = GetDC (hwnd);
   LineTo (hdc, LOWORD (lParam), HIWORD (lParam));
   ReleaseDC (hwnd, hdc);
  }
  break;
  case WM_LBUTTONDBLCLK:
  {
   HDC hdc = GetDC (hwnd);
   Ellipse (hdc, LOWORD (lParam) - 3, HIWORD (lParam) - 3, LOWORD (lParam) + 3, HIWORD (lParam) + 3);
   ReleaseDC (hwnd, hdc);
  }
  break;
  case WM_CLOSE:
   DestroyWindow (hwnd);
  break;
 
  case WM_DESTROY:
   PostQuitMessage (0);
  break;
 
  default:
   return DefWindowProc (hwnd, msg, wParam, lParam);
  }
 
 return 0;
}

Podczas kompilacji wywala mi:
[Linker error] undefined reference to LineTo@12' [Linker error] undefined reference to Ellipse@20'

0

No i jak myślisz, co kompilator podpowiada? Może to, że nie potrafi nigdzie znaleźć czegoś takiego jak nazwy tych funkcji?
Wejdź tutaj: http://msdn.microsoft.com/en-us/library/dd145029(v=vs.85).aspx a później tutaj: http://msdn.microsoft.com/en-us/library/dd162510(v=vs.85).aspx i sprawdź jakie są wymagania (podpowiem: Requirements) dla danych funkcji i dołącz odpowiednie biblioteki, żeby linker wiedział gdzie może te funkcje znaleźć..

0

Nie kompilator podpowiada tyko linker ;)
Musisz jeszcze dołączyć mu(linkerowi) bibliotekę Gdi32.lib

0

powiem Ci tak:

  • kompilator kompiluje wszystkie pliki .cpp osobno, do kodu dosłownie dołącza to co jest napisane w plikach .h
  • z każdego pliku .cpp kompilator robi sobie listę symboli: zmiennych globalnych, funkcji itd.
  • dołączając pliki .h z nagłówkami funkcji mówisz kompilatorowi: gdzieś znajduje się symbol XY, załóż że on istnieje i używaj go
  • wszystko się pięknie kompiluje i dostajesz zestaw plików .a, .lib, .o lub innych w zależności od kompilatora, ale do pliku exe jeszcze kawałek drogi,
  • teraz przychodzi kolej na linkera, skleja on wszystkie pliki o których wspomniałem wyżej w jeden plik .EXE (na windowsie, na linuksie dostajesz plik o bliżej nieokreślonym rozszerzeniu, ale da się go odpalić),
  • linker sprawdza sobie jakie symbole zostały użyte w każdym z tych plików i sprawdza czy jakiegoś nie brakuje,
  • jeśli wszystko jest to dostajesz piękny i świeży plik EXE,
  • jeśli czegoś zabrakło to dostajesz błąd, że odniesienie do symbolu jest nieokreślone: undefined reference to ...

dodam, że nie tylko programy napisane w C++ kompilują się do takiego formatu. programy napisane w C, assemblerze i innych językach też mogą się do takiego formatu kompilować (czasami jest to inny podobnie działający format)

rozwiązanie na Twój problem:

  • znaleźć plik .cpp/.c, który po skompilowaniu da ci brakujący symbol (o tym zapomnij, bo MS nie da ci takiego pliku)
  • znaleźć plik o rozszerzenie .a/.lib/... w którym ten symbol jest zawarty - ten plik powinien znajdować się w folderze lib w którymś z folderów kompilatora - znajdź w internecie jego nazwę i dołącz go do projektu.

EDIT: @byku_guzio napisał ci jaka to biblioteka, mam nadzieje ze sobie poradzisz :P

0

dzięki, domyślałem się, że chodzi o tą bibliotekę, tylko nie bardzo wiem jak ją dołączyć, będę wdzięczny za pomoc.

0

w opcjach linkera?

0

prostytutka! przeczytałeś mój przedpoprzedni post (ten długi)?

kompilator -> pliki źródłowe
linker -> skompilowane obiekty

0

korzystam z dev-C++ i nie bardzo wiem jak to obsłużyć, dlatego proszę w tej kwesti o dokładną pomoc.

0

Wejdź sobie w opcje projektu czy jak to tam w tym czymś wygląda, znajdź opcje linkera i w tych opcjach dodaj mu brakującą bibliotekę i tyle. Wcześniej jednak lepiej zmień dev'a na coś cywilizowanego.

1

i projekt utwórz

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