Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Lỗi: undefined reference to ... của MinGW

  1. #1
    Ngày gia nhập
    10 2008
    Nơi ở
    Quảng Trị
    Bài viết
    369

    Mặc định Lỗi: undefined reference to ... của MinGW

    Mình viết một chương trình vẽ một đường tròn như sau:

    File Main.cpp

    Visual C++ Code:
    1. #define UNICODE
    2. #define _UNICODE
    3. #include "Common.h"
    4. #include "DuongTron.h"
    5.  
    6. LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    7. {
    8.     DuongTron duongtron;
    9.     HDC hdc;
    10.    
    11.     switch (uMsg)
    12.     {
    13.        case WM_PAINT:
    14.            duongtron.DatBanKinh(100); /* <=== */
    15.            duongtron.DatMau(RGB(0, 0, 0)); /* <=== */
    16.            duongtron.DatToaDo(100, 100); /* <=== */
    17.            
    18.            hdc = GetDC(hWnd);
    19.         duongtron.Ve(hdc);
    20.         ReleaseDC(hWnd, hdc);
    21.         break;
    22.        
    23.     case WM_DESTROY:
    24.         PostQuitMessage(0);
    25.         break;
    26.  
    27.     default:
    28.         return DefWindowProc(hWnd, uMsg, wParam, lParam);
    29.     }
    30.     return 0;
    31. }
    32.  
    33. int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
    34. {
    35.     WNDCLASSEX wcex;
    36.     MSG msg;
    37.     wchar_t *szClassName = L"gditest";
    38.  
    39.     wcex.cbSize            = sizeof(WNDCLASSEX);
    40.     wcex.cbClsExtra        = NULL;
    41.     wcex.cbWndExtra        = NULL;
    42.     wcex.hInstance        = hInst;
    43.     wcex.lpfnWndProc    = WndProc;
    44.     wcex.hIcon            = LoadIcon(NULL, IDI_APPLICATION);
    45.     wcex.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
    46.     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    47.     wcex.lpszClassName    = szClassName;
    48.     wcex.style            = CS_HREDRAW|CS_VREDRAW;
    49.     wcex.lpszMenuName    = NULL;
    50.     wcex.hbrBackground    = (HBRUSH) (COLOR_3DFACE + 1);
    51.  
    52.     if (!RegisterClassEx(&wcex)) return 0;
    53.  
    54.     HWND hWnd = CreateWindowEx(NULL, szClassName, L"Gdi test", WS_OVERLAPPEDWINDOW, \
    55.                                CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, HWND_DESKTOP, NULL, hInst, NULL);
    56.  
    57.     if (!hWnd) return 0;
    58.  
    59.     ShowWindow(hWnd, nCmdShow);
    60.     UpdateWindow(hWnd);
    61.  
    62.     while (GetMessage(&msg, NULL, NULL, NULL))
    63.     {
    64.         TranslateMessage(&msg);
    65.         DispatchMessage(&msg);
    66.     }
    67.     return msg.wParam;
    68. }

    File Common.h:
    Visual C++ Code:
    1. #ifndef __NB_GDI_TEST__
    2.  
    3. #define __NB_GDI_TEST__
    4. #include <windows.h>
    5. #include <cmath>
    6.  
    7. #endif

    File DuongTron.h:
    Visual C++ Code:
    1. class DuongTron
    2. {
    3. private:
    4.     int BanKinh; /* Ban kinh duong tron */
    5.     POINT ToaDo; /* Toa do X, Y */
    6.     COLORREF Mau; /* Mau */
    7.     void VeTamDiem(HDC hdc, int In_x, int In_y, COLORREF In_Mau); /* Ve 8 diem doi xung */
    8.  
    9. public:
    10.     void DatBanKinh(int In_BanKinh); /* Dat ban kinh */
    11.     void DatToaDo(int In_x, int In_y); /* Dat toa do */
    12.     void DatMau(COLORREF In_Mau); /* Dat mau */
    13.     void Ve(HDC hdc); /* Ve */
    14. };

    File DuongTron.cpp:
    Visual C++ Code:
    1. #include <cmath>
    2. #include "Common.h"
    3. #include "DuongTron.h"
    4.  
    5. inline void DuongTron::DatBanKinh(int In_BanKinh){BanKinh = In_BanKinh;}
    6. inline void DuongTron::DatMau(COLORREF In_Mau){Mau = In_Mau;}
    7. inline void DuongTron::DatToaDo(int In_x, int In_y){ToaDo.x = In_x; ToaDo.y = In_y;}
    8.  
    9. void DuongTron::VeTamDiem(HDC hdc, int In_x, int In_y, COLORREF In_Mau)
    10. {
    11.     SetPixel(hdc, In_x + ToaDo.x, In_y + ToaDo.y, Mau);
    12.     SetPixel(hdc, -In_x + ToaDo.x, In_y + ToaDo.y, Mau);
    13.     SetPixel(hdc, In_x + ToaDo.x, -In_y + ToaDo.y, Mau);
    14.     SetPixel(hdc, -In_x + ToaDo.x, -In_y + ToaDo.y, Mau);
    15.    
    16.     SetPixel(hdc, In_y + ToaDo.x, In_x + ToaDo.y, Mau);
    17.     SetPixel(hdc, -In_y + ToaDo.x, In_x + ToaDo.y, Mau);
    18.     SetPixel(hdc, In_y + ToaDo.x, -In_x + ToaDo.y, Mau);
    19.     SetPixel(hdc, -In_y + ToaDo.x, -In_x + ToaDo.y, Mau);
    20. }
    21.  
    22. void DuongTron::Ve(HDC hdc)
    23. {
    24.     for (int i = 0; i < BanKinh*sqrt(2); ++i)
    25.         VeTamDiem(hdc, i, sqrt(BanKinh*BanKinh - i*i), Mau);
    26. }

    Nhưng khi biên dịch với C-Free (dùng MinGW 3.4.5) nó báo lỗi:
    Code:
    [Error] G:\C++\MinGW\Gdi test\MinGW 3.4.5\Main.o:Main.cpp:(.text+0x30): undefined reference to `DuongTron::DatBanKinh(int)'
    [Error] G:\C++\MinGW\Gdi test\MinGW 3.4.5\Main.o:Main.cpp:(.text+0x43): undefined reference to `DuongTron::DatMau(unsigned long)'
    [Error] G:\C++\MinGW\Gdi test\MinGW 3.4.5\Main.o:Main.cpp:(.text+0x5e): undefined reference to `DuongTron::DatToaDo(int, int)'
    Mọi người xem giúp mình bị lỗi sao? Các hàm được viết trong file DuongTron.cpp rồi mà.
    Born to walk against the wind... Born to hear my name...
    Stand and fight... Live by your heart...
    Always one more try... I'm not afraid to die...
    Stand and fight... say what you feel...
    Born with a heart of steel ...

  2. #2
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Trong file DuongTron.h thêm như sau:

    Visual C++ Code:
    1. #ifndef __DUONGTRON_H__
    2. #define __DUONGTRON_H__
    3. class DuongTron
    4. {
    5. private:
    6.     int BanKinh; /* Ban kinh duong tron */
    7.     POINT ToaDo; /* Toa do X, Y */
    8.     COLORREF Mau; /* Mau */
    9.     void VeTamDiem(HDC hdc, int In_x, int In_y, COLORREF In_Mau); /* Ve 8 diem doi xung */
    10.  
    11. public:
    12.     void DatBanKinh(int In_BanKinh); /* Dat ban kinh */
    13.     void DatToaDo(int In_x, int In_y); /* Dat toa do */
    14.     void DatMau(COLORREF In_Mau); /* Dat mau */
    15.     void Ve(HDC hdc); /* Ve */
    16. };
    17.  
    18. #endif // __DUONGTRON_H__

    Thế này là OK tuốt.
    Ước mơ vươn tới Linux Developer.
    Đang trong quá trình tập luyện:
    1. C system programming
    2. GNU distribution
    3. Gtk+/Gnome Application Programming.

    Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!

  3. #3
    Ngày gia nhập
    10 2008
    Nơi ở
    Quảng Trị
    Bài viết
    369

    Đã thêm, nhưng mà vẫn bị như vậy! :(
    Born to walk against the wind... Born to hear my name...
    Stand and fight... Live by your heart...
    Always one more try... I'm not afraid to die...
    Stand and fight... say what you feel...
    Born with a heart of steel ...

  4. #4
    Ngày gia nhập
    04 2007
    Bài viết
    134

    Mấy file này chung project phải ko?
    Thử bỏ inline xem.

  5. #5
    Ngày gia nhập
    10 2008
    Nơi ở
    Quảng Trị
    Bài viết
    369

    Tuyệt vời! được rồi, thanks Lugia
    Born to walk against the wind... Born to hear my name...
    Stand and fight... Live by your heart...
    Always one more try... I'm not afraid to die...
    Stand and fight... say what you feel...
    Born with a heart of steel ...

Các đề tài tương tự

  1. Lập trình C++ Vấn đề với 'undefined reference to...'
    Gửi bởi Scifi trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 11-04-2012, 12:52 AM
  2. gcc 4.4.5 lỗi undefined reference to `__stack_chk_fail
    Gửi bởi AlexF trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 5
    Bài viết cuối: 30-12-2010, 03:54 PM
  3. undefined reference to `AcceptEx@32'
    Gửi bởi haian trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 12-04-2010, 04:45 PM
  4. Lỗi undefined reference to
    Gửi bởi lyland trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 08-12-2009, 05:22 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn