星期一, 8月 10, 2009

在越複雜的地方要用越複雜的名字!!

在越複雜的地方要用越複雜的名字,這是面對大型程式的處事之道!!

對我來講 ns2 算是非常複雜,非常龐大的程式。

今天處理了一個非常淺顯易懂,但是又不容易發現的錯誤,連 debugger 拿出來用了,雖然直覺告訴我事情不應該往那個方向發展。(經驗不足啦 @@)

因為論文的需求所以會需要用到 ns2 裡面 timer的功能,timer 的目的也很簡單,就是讓程式時間到了就執行特定的程式碼,達到控制時間的效果。

參考了相關的程式碼,做出一個可以用的 timer,功能都有達到。後來另外需要一個廣播有關的timer,所以就順其自然的把 classname 命名為 BroadcastTimer。

class BroadcastTimer : public TimerHandler {
public:
BroadcastTimer(PingAgent *a) : TimerHandler(), a_(a) { }
protected:
virtual void expire(Event *);
PingAgent *a_;
};

哈!! 這該死的問題就出在這裡!!

一直不得其解,花了好久才發現原因,取一個太大眾,又太通俗的名字,造成和預期以外的某個 class 起了衝突,難怪怎麼檢查都查不出錯誤。

沒有留言: