我想使用基于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)'。希望它能起作用 –