個人C 錯誤彙總

2021-09-30 16:34:15 字數 2088 閱讀 9786

1、class定義後面要加分號;

2、成員函式沒有定義為static型別

cannot call member function ' without object

3、檔案組織格式

template定義等都在**件,不需要包含其他標頭檔案

呼叫在c檔案,包含template的**件

4、公有的靜態成員變數需要在「外部」初始化,才能被其他成員函式使用。

如宣告時為static const char * const pcv;  ---- static只能放在宣告處。

初始化必須為類似const char * const an::pcv="ab";  --- 必須完整定義。

5、linux下編譯, 標頭檔案也區分大小寫

no such file or directory

6. static_cast

static_cast(pnode) -- 必須兩側加括號括起來。如果是則會產生乙個臨時物件;而則不會。

7. 子類覆蓋基類的成員函式,必須在子類中重新宣告,否則失敗;

而宣告在子類的哪個區域下,沒有限制!

使用指標,引用方式通過基類呼叫,則要求在基類的public區;(這時即使子類宣告在private區也可以被實際呼叫)

而如果直接呼叫子類的成員函式,而子類宣告不在public區,則不可以呼叫;

8. 注意構造和析構順序

在基類的析構函式中不能呼叫派生類的成員函式,因為子類已經被析構了!!!這時只能覆蓋析構函式。

同理,基類的析構函式也不要呼叫虛函式,即使呼叫虛函式,c++編譯器也會只選擇基類的函式定義;

9. "a" 被以引用方式傳遞,則解析為constchar [2];有時候解析為const char *;

string("a")被解析為string,二者都不是string &

using namespace std;

void fun(string s)

void fun2(string & s)

int main()

10. 如果基類的建構函式有引數輸入(無預設值),則子類必須自定義建構函式,不能使用預設的建構函式,因為無法預知基類如何構造!

11. 別忘了using namespace;

12. 別忘了標頭檔案的#ifndef 檢查,否則可能出現重複定義錯誤!!!

13. boost::shared_ptrxdata; 共享指標的模板引數為type,而不是type的指標!但得到的是type的之共享指標!

14. 刪除指標容器中的元素,一定要小心,別忘了釋放指標所指的記憶體;當針對迭代器執行erase之後,迭代器會失效,所以要最後erase迭代器,先釋放迭代器所指的記憶體。

delete (*it);

*it = null;

_childrule.erase(it);

15. 常引用

int a ;

const int &ra=a;

ra=1; //錯誤

a=1; //正確

16. inline定義放錯位置,沒有放置在標頭檔案中,導致ld時找不到此函式定義!!!

17. 列印string時,沒有使用c_str()成員函式進行轉換,導致列印不出來!

18. 將const vector&賦給了 vector&,導致編譯不過。

19. vector容器的引用,delete元素[0],則「[0]下標」變為原來[1]的元素!相當於迭代器失效。

20. 在union中不要包含物件,一般編譯器會有如下錯誤:

with constructor not allowed in union

with destructor not allowed in union

with copy assignment operator not allowed in union

21. protected member func和private一樣只能被其他成員函式使用,不能顯示呼叫。基類的protected成員函式,public方式繼承,在派生類中還是protected型別。

子類不能繼承的:

its constructor and its destructor

its operator=() members

its friends

C 學習錯誤彙總

1.pieceworker const long number,const char name pieceworker const long number,const char name,double wageperpiece 0,int quantity 0 第二個建構函式,使用了預設引數,也就是...

C 常見記憶體錯誤彙總

在系統開發過程中出現的bug相對而言是比較好解決的,花費在這個上面的除錯代價不是很大,但是在系統整合後的bug往往是難以定位的bug 最好方式是打樁,通過打樁可以初步鎖定出錯的位置,如 進入函式前列印日誌,離開時再次列印日誌 而這些難以定位的bug基本分為2類 記憶體錯誤和並非問題。1 記憶體洩露 ...

C 常見記憶體錯誤彙總

c 中記憶體錯誤通常屬於執行時錯誤,只有在程式執行時才能發現,編譯器無法自動檢測到記憶體錯誤。多數情況下是程式邏輯或者引數存在某些錯誤。下面總結一下c 常見的記憶體錯誤 1.記憶體洩露 記憶體洩露是指應用程式未釋放動態申請的且不再使用的記憶體,原因可能是程式設計師疏忽或者錯誤造成程式異常。在c c ...