基於C++中常見編譯錯誤的總結詳解

來源:互聯網
上載者:User

在日常編碼過程中會遇見各種編譯錯誤,本文對常見的編譯錯誤進行分析總結。(基本的編譯錯誤在這裡不列舉,後續後持續更新)

1、error c101008a解決方案
該錯誤出現在項目升級過程中會出現,比如說項目從vs2008升級到vs2010.
解決辦法:在項目上點右鍵,清理(Clean),重新編譯,問題解決

2、error C2252解決方案
該錯誤主要在項目從vs2008升級到vs2010出先。
error C2252: an explicit instantiation of a template can only occur at namespace scope
解決方案:將特例話的模板移到類外面(It is saying that you cannot explicitly instantiate a template inside a function or a class.Move it to outside the function or class.)

3、error C2143:語法錯誤:缺少“;”(在“*”的前面)
該錯誤主要是某類型資料未include,可能是都檔案拼字錯誤、或者標頭檔名已經更改、或是標頭檔忘記“;”
解決辦法:檢查標頭檔是否更名、是否忘記結束的“;”

4、error C1010:尋找先行編譯頭時遇到意外的檔案結尾。是否忘記了向源中添加“#include "StdAfx.h”
解決辦法:在報錯行所在的檔案的最前面添加“#include "StdAfx.h”

5、error C1189:出現了WINDOWS.H already included. MFC apps must not #include <windows.h>的處理辦法。
解決辦法:把#include<afxwin.h>提到最前面去就可以編譯成功了。

6、error LNK2005: _DllMain@12 already defined in dllmain.obj
解決辦法:你只需要在工程設定裡面把WIN32,NDEBUG,_WINDOWS,_MBCS,_USRDLL,MSGBOX_EXPORTS,_WINDLL,_AFXDLL
中的_USRDLL,刪除,就可以正確編譯了

7、R6010錯誤,出現R6010錯誤的原因很多
1、資料庫缺少一個視圖、
2、資料庫某個預存程序名發生變化,也可能是參數個數發生變化。
3、exe和dll是否混用的不同版本的crt
4、記憶體資源未釋放
5、輸出參數不正確
總之:windows將自身無法定位到的錯誤類型都歸結為R6010錯誤

8、error C2361:initialization of
error C2361: initialization of 'iter2' is skipped by 'default' label
解決辦法:出現這個問題原因是因是switch沒有正常的初始化,只需要在iter2的位置控制其範圍即可,在這裡添加{}就可以了。
案例分析:來自實際項目的一段代碼,簡化形式如下:
switch (t)
{
case 0:
int a = 0;
break;
default:
break;
}
有什麼問題嗎?似乎沒有。請用編譯器編譯一下……
嗯?!一個錯誤“error C2361: initialization of 'a' is skipped by 'default' label”。這怎麼可能?
幾番思琢,悟出解釋:
C++約定,在塊語句中,對象的範圍從對象的聲明語句開始直到塊語句的結束,也就是說default標號後的語句是可以使用對象a的。
如果程式執行時從switch處跳到default處,就會導致對象a沒有被正確地初始化。
確保對象的初始化可是C++的重要設計哲學,所以編譯器會很嚴格地檢查這種違例情況,像上述的範例程式碼中default語句後面並沒有使用a,
但考慮到以後代碼的改動可能無意中使用,所以一樣被封殺。
明白了原因,解決起來就很容易了。只要明確地限制對象a的範圍就行了。
switch (t)
{
case 0:
{ //added for fix problem
int a = 0;
break;
} //added for fix problem
default:
break;
}
在switch...case...結構中不能在case中定義新變數,for(int i = 0;...)
除非將定義新變數的case用塊{}包住,或者選擇將你的新變數在switch之前。

9、Link2019:unresolved external symbol 'symbol' referenced in function 'function'
函數只有申明,沒有實現時,或是DLL中的函數沒有export

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.