編譯程序時出現的問題和解決方法

Q:Error  LNK2019 unresolved external symbol _WinMain@16 referenced in function "int __cdecl invoke_main(void)" (invoke_main@@YAHXZ)

A:產生這個問題可能的原因

  1. 你用vc建了一個控制檯程序,它的入口函數應該是main, 而你使用了WinMain.

  2.  與1相反

   解決方法

  1.進入project->setting->c/c++, 在category中選擇preprocessor,在processor definitions中刪除_CONSOLE, 添加_WINDOWS

  2.進入project->setting->Link, 在Project options中將 /subsystem 設置爲Console (/SUBSYSTEM:CONSOLE)

  3.保存設置,Rebuild 

Q:C++經典錯誤之already defined in .obj解決方法之補充

A:最近在項目中,編寫了一個ini文件的操作類,在被其他代碼引用的過程中,總是會出現鏈接錯誤,即error LNK2005:already defined in .obj,記得最開始寫C++代碼時,也出現過這種錯誤,經過網絡資料,最後還是順利的解決了,但是這次的情況和以前有些不同,應該不算是這類錯誤的典型,後來經過嘗試,解決了這個問題。

       首先,介紹下一般典型的發生該錯誤的情況及解決辦法。以下內容摘自網絡,網址爲http://hi.baidu.com/3512/blog/item/d568bc340c002cb4d0a2d3d6.html。
       程序是如下形狀:一個頭文件.h,一個主函數.cpp,一個操作函數.cpp。操作函數包含頭文件,然後主函數包含操作函數.cpp。運行時就會出現該錯誤。
解決方案一:
把主函數所包含的操作函數.cpp,改爲頭文件.h,然後就可以解決如上錯誤。
解決方案二:
重新打開編譯器,重新打開剛纔的文件,先打開主函數.cpp,然後編譯運行,打開Fileview,其中有一個external dependencies,把頭文件.h,和操作函數.cpp添加到這裏,這樣再編譯運行主函數.cpp,程序運行成功!
       其次,說說本人遇到這個錯誤的代碼情況。該ini的操作類中包含了兩個模板函數,所以將所有的成員函數就放到了頭文件.h當中,被引用時只要包含該頭文件就可以了,即#include “***.h”,但是當在多個地方這樣操作的時候,就會出現上面的錯誤。其實本質上,本人的情況也和上述一致,只是形式發生了一些變化,所以上面介紹的解決方法就有些不夠全面了,這裏給予補充一下。
       解決方案:

       添加相應的cpp文件,並將頭文件.h中的非模板函數都移到cpp文件,而模板函數的實現都放到文件.h中,這樣,當多處引用該頭文件的時候,就不會再出現該錯誤。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章