程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> error LNK2019: unresolved external symbol _main referenced i

error LNK2019: unresolved external symbol _main referenced i

編輯:C++入門知識

編譯一段程序時,出現連接器錯誤:

error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

 

該程序大致如下:

 

VisualStudio 10.0

properies | general | character set : "Use Unicode Character Set"

properies | linker | system : "Console (SUBSYSTEM:CONSOLE)"

 

[cpp]
namespace mystock 

 
const int .....; 
const wchar_t* const .....; 
class .......{}; 
class .......{}; 
....... 
 
int _cdecl wmain(int argc, wchar_t* argv[]) 

    ......; 
    ......; 

 
} // namespace mystock 

namespace mystock
{

const int .....;
const wchar_t* const .....;
class .......{};
class .......{};
.......

int _cdecl wmain(int argc, wchar_t* argv[])
{
    ......;
    ......;
}

} // namespace mystock
為什麼?我的main函數看起來沒錯啊?

 

對於CRT在什麼情況下會要求什麼樣的main函數,相信讀者很清楚。可這次的問題從未遇到過。

 

干想了二十分鐘,終於想起來了。或者說是蒙對了,其實心裡仍然不很清楚。

我注意到了連接器想要的是“_main”,為什麼有“_”?即使是向導生成的_tmain,在宏展開後也是main或者wmain啊?

 

自動加下劃線,不是C編譯器對cdecl的修飾規則嗎?對了,難道是因為我把wmain放到一個namespace裡,就怎麼怎麼著了?

 

那就咬牙試一試:

extern "C" int _cdecl wmain(int argc, wchar_t* argv[]){ ......

 

連接器錯誤消失。

 

如果讀者你,恰好也遇到類似問題,希望這篇文章有所幫助。

如果你知道的更詳細,請回復指導:

1,為什麼main函數放到namespace裡就必須要extern "C"了?

2,main不放到namespace裡,但是在.cpp文件裡,在編譯器默認設置的情況下,難道就是extern "C"了?不應該啊。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved