【发布时间】:2016-11-21 13:56:18
【问题描述】:
我正在尝试在子类 PassiveQueueBase 中设置一个参数,并在基类 IPassiveQueue 的另一个子类 PriorityScheduler 中调用它。
PriorityScheduler 继承自 SchedulerBase,它有一个指针 (inputQueue) 指向类型为 IpassiveQueue 的人,并将调用 PacketEnqueued() 函数到 PriorityScheduler。这显示在这段代码中
class INET_API SchedulerBase : public cSimpleModule, public IPassiveQueue, public IPassiveQueueListener
{
public:
virtual void packetEnqueued(IPassiveQueue *inputQueue) override;
};
注意: IpassiveQueue.h 没有 .cc 文件,它是许多其他类的接口文件。
我尝试做的如下所示,
class INET_API IPassiveQueue
{
public:
simtime_t sendWindowStart;
simtime_t sendWindowEnd;
virtual void setWindows() {};
};
class INET_API PassiveQueueBase : public cSimpleModule, public IPassiveQueue
{ protected:
void setWindows(simtime_t SWS,simtime_t SWE);
};
void PassiveQueueBase :: setWindows(simtime_t SWS,simtime_t SWE)
{ SWS = 3; SWE = 4;
sendWindowStart = SWS;
sendWindowEnd = SWE;
};
bool PriorityScheduler::schedulePacket()
{
IPassiveQueue *pqueue;
pqueue->setWindows();
sendWindowStart = inputQueue->sendWindowStart;
sendWindowEnd = inputQueue->sendWindowEnd;
}
运行模拟时出现错误,如下所示
模拟以退出代码终止:139 工作目录: /home/usrname/omnetpp-5.0/samples/inet/examples/mysimulation 命令行: opp_run -r 0 -n ..:../../src:../../tutorials -l ../../src/INET --debug-on-errors=false omnetpp.ini
这一行还有感叹号
pqueue->setWindows();
附上这篇笔记
‘Pqueue’可以在这个函数中使用未初始化 [-W可能未初始化]
【问题讨论】:
-
您打算将修改后的队列类用作典型的
OMNeT++队列吗?如果是,您应该准备一个继承自PassiveQueueBase和IQueueAccess的新类,其中PassiveQueueBase是INET 中已经存在 的类(不是您的类)。 -
好吧,这是我在这个问题中展示的一步,因为我希望这个变量出现在 DropTailQueue 中,它再次继承自 QueuePassiveBase。我在交换机的内部队列中使用 DropTailQueue。所以我不会说这是我的个人课程,我仍在使用 omnet++ Queue。
-
在您的问题中,您提出了
IPassiveQueue类,它与INET的IPassiveQueue不同。如果你想使用自己的队列,我强烈建议准备一个继承自PassiveQueueBase和IQueueAccess的新类。在这个新类中,您可以添加自己的变量以及自己的行为。 -
对不起,我现在明白你的意思了。会努力的。