banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows [Hỏi] Về Lỗi LNK 2005 và chỉ lệnh Linker /FORCE  XML
  [Programming]   [Hỏi] Về Lỗi LNK 2005 và chỉ lệnh Linker /FORCE 01/12/2008 15:19:04 (+0700) | #1 | 160860
VaT
Member

[Minus]    0    [Plus]
Joined: 04/09/2008 00:17:52
Messages: 87
Offline
[Profile] [PM]
Trong ứng dụng của em có tạo một file header MyResource.h để chứa các Biến, các Lớp sẽ được dùng chung cho toàn bộ chương trình.
Giả sử bây giờ ứng dụng của em có 3 Dialog : MyAppDlg (Main Dlg), MyAppLoginDlg , MyAppEditDlg.
Trong MyAppDlg của em có một button gọi là Login. Khi em nhấn Login sẽ xuất hiện MyAppLoginDlg để nhập user và password. Nếu đúng user và pass thì sẽ hiện ra MyAppEditDlg.

Bây giờ, nếu em chỉ include MyResource.h của em vào MyAppDlg.cpp thì biên dịch ngon lành. Nhưng nếu em tiếp tục include MyResource.h vào MyAppLoginDlg để có thể sử dụng các biến và Lớp mà em đã khai báo trong đó thì khi biên dịch lập tức sẽ xảy ra lỗi LNK 2005 và không thể chạy được ứng dụng.

Và em đã có tham khảo lỗi LNK 2005 trong MSDN và được chỉ cách khắc phục là thêm vào Linker chỉ lệnh biên dịch /FORCE . Sau khi làm xong hướng dẫn, em biên dịch lại, chuơng trình vẫn chạy được nhưng trong Output của phần biên dịch nó vẫn xuất hiện thông báo Warning.

Vậy em muốn hỏi là làm sao để có thể một file header chứa các biến và các lớp mà ta khởi tạo sẽ được dùng chung cho toạn bộ ứng dụng mà không bị lỗi LNK 2005.

P/S : LNK 2005 : symbol already defined in object


[Up] [Print Copy]
  [Question]   Re: [Hỏi] Về Lỗi LNK 2005 và chỉ lệnh Linker /FORCE 01/12/2008 15:39:05 (+0700) | #2 | 160863
VaT
Member

[Minus]    0    [Plus]
Joined: 04/09/2008 00:17:52
Messages: 87
Offline
[Profile] [PM]
Hình như trong file MyResource.h của em. Các biến hay các lớp của em phải có thêm từ khóa extern .
Nhưng khi em thêm từ khóa extern vào:
MyResource.h
Code:
extern CString Testcai


thì khi biên dịch lại xuất hiện lỗi

Code:
error LNK2001: unresolved external symbol....
fatal error LNK1120: 1 unresolved externals


Em thật sự không hiểu tại sao như vậy? Làm thế nào để sử dụng biến, hàm, class toàn cục trong C++



[Up] [Print Copy]
  [Question]   Re: [Hỏi] Về Lỗi LNK 2005 và chỉ lệnh Linker /FORCE 01/12/2008 16:37:27 (+0700) | #3 | 160867
VaT
Member

[Minus]    0    [Plus]
Joined: 04/09/2008 00:17:52
Messages: 87
Offline
[Profile] [PM]
Sau khi lên mạng Google vài chục vòng. Em thấy có một số bài nói về việc hạn chế dùng Global Variable và hạn chế declare variable trong file header. Các bạn có thể giải thích lý do tại sao lại làm như vậy không, mình thật sự chưa rõ lắm về vấn đề này. Nhưng có những trường hợp( 1 file .h nhưng được dùng cho nhiều .cpp) thì mình cần phải làm thế nào? Em đã thử dùng extern nhưng vẫn bị lỗi LNK2001 và LNK1120. Mong được các bạn chỉ điểm thông suốt vấn đề này.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|