我想使用基於Omnet ++的容器cQueue
作爲優先級隊列。
正如在API參考和說明書中介紹的 - 我需要定義它
如下:
cQueue queue("Name of queue", someCompareFunc)
如何在Omnet ++中實現cQueue作爲優先級隊列?
當someCompareFunc
是CompareFunc
類型是由OMNET所定義的:
typedef int (*CompareFunc)(cObject *a, cObject *b);
所以,我想實現這個比較功能,但沒有設法編寫一些可以編譯的東西。
我承認我在一段時間內沒有使用函數指針,但經過一些小小的研究後,我認爲我確實理解,並且使用eclipse IDE(C++)編寫了一些測試代碼。
我試圖寫代碼在simpleModule
file.cc.
因此,對於我以「常規方式」在頭文件中聲明的每個函數,在.cc文件中,我需要在函數名稱前加上帶有「::」的模塊名稱。
所以在我的頭文件,我宣佈:
int compareByNodes (cObject *a, cObject *b);
而在.cc文件:
int JobScheduler::compareByNodes (cObject *a, cObject *b){
return 1;
};
我第一次嘗試定義cQueue是:
cQueue queue("job_Buffer",&compareByNodes);
但我收到編譯錯誤:'compareByNodes'未在此範圍內聲明。
所以我認爲它必須與'JobScheduler ::'缺失有關。
第二個嘗試是:
CompareFunc tmp = (CompareFunc)&JobScheduler::compareByNodes;
cQueue queue("job_Buffer",tmp);
這一次我的錯誤是:
這行
「多重標記 - 這種情況下
內 - 從「詮釋(的jobscheduler :: )(omnetpp轉換: :CObject的,omnetpp :: CObject的*)」到 'omnetpp :: CompareFunc {又名INT() (omnetpp :: CObject的,omnetpp :: CObject的*)}'[-Wpmf-轉換]」
'和號'之後加上括號也沒有幫助。
如果我可以使用Omnet的這種方法,我想我會錯過一些東西,因爲它是軟件的一個明確定義的「特徵」,這真的很有幫助。
我也嘗試谷歌這些主題,在谷歌組搜索部分,並沒有找到任何答案。
將不勝感激
謝謝!此解決方案有效。我還需要隊列爲全局的 ,因爲它被幾個函數使用。因此,我在initialize()函數內定義了一個全局cQueue *, 並賦給它'new cQueue(「name」,method)'。希望它能起作用 –