close

今天在工作上遇到一個embeded system 在 C++overloading使用上的奇怪現象,

簡單講就是一個class定義很多個相同名稱的member fumctions, 這些functions除了第一個參數不同之外,

其他順序的參數都是相同型態, 而且都是有default value,

但是在某個application呼叫時, 因為只傳了第一個參數, 但是在linkage時卻發生warning表示鏈結到錯誤的member.

以下圖為例, 就是呼叫 funcA(SIT); 卻有warning顯示link到funcA(int k,......);這個member.

因為當時孤立無援, 最快的解法就是呼叫時寫成funcA(SIT, 1, NULL);

也就是把prototype定義的default value全部搬到caller裡面, 這樣linkage就沒warning.

 

事情原本這樣就過去了, 可是好奇心殺死一隻貓,

決定用gnu來試一下,

test code如下圖較大的視窗, 執行過程就在較小的視窗上.

cpp多型測試  

第一個測試只是單純的把上面提到的問題用test code測一下,

結果pTest->funcA(STAND)的結果沒問題, compiling 也沒warning.

 

第二個測試把ADVANCE_TEST 打開

這時後會先呼叫funcA(RUN, 3), 再呼叫funcA(SIT, p1);

compiling time就有warning.這也是很合理的

只是第二階段的結果也證明gnu 還是 有正確linkage. 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Orion 的頭像
    Orion

    Orion's blog

    Orion 發表在 痞客邦 留言(0) 人氣()