Omnet++ 在OMNET++&引用;对“afdx::wdrr::buff(afdx::AFDXMessage)”的未定义引用;错误
我曾试图通过定义我自己的类wdrr,在OMNET++中编写我自己的调度逻辑,但在我编写时出现了一些错误,如未定义的引用,我是OMNET++的新手,因此请任何人进一步建议如何做以及如何解决此问题 注意:我附上了我所做的事情和错误 事先非常感谢Omnet++ 在OMNET++&引用;对“afdx::wdrr::buff(afdx::AFDXMessage)”的未定义引用;错误,omnet++,Omnet++,我曾试图通过定义我自己的类wdrr,在OMNET++中编写我自己的调度逻辑,但在我编写时出现了一些错误,如未定义的引用,我是OMNET++的新手,因此请任何人进一步建议如何做以及如何解决此问题 注意:我附上了我所做的事情和错误 事先非常感谢 #include "RegulatorLogic.h" #include "AFDXMessage_m.h" #include <iostream> #include <math.h> #in
#include "RegulatorLogic.h"
#include "AFDXMessage_m.h"
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
class wdrr : public cSimpleModule
{
public:
int basequantum; // Basequantum
int priority; // priority for the queues
int weight; // weights assigned as per priority of ques
int pktlength; // packet length of afdx data received in queue
int cnstwtqnt; // constant weight count
int cal_wtqnt; // cal weight cnt
int dfcntr; // difict counter
cQueue buff(afdx::AFDXMessage); // queue of afdx data
};
class wdrr obj;
std::vector<wdrr> queu;
bool send_msg(void);
namespace afdx {
Define_Module(RegulatorLogic);
void RegulatorLogic::initialize()
{
// TODO - Generated method body
}
void RegulatorLogic::handleMessage(cMessage *msg)
{
afdx::AFDXMessage *afdxMsg = check_and_cast<afdx::AFDXMessage *>(msg);
EV_INFO << "NetworkID " << afdxMsg->getNetworkId() << endl;
EV_INFO << "EquipmentId " << afdxMsg->getEquipmentId() << endl;
EV_INFO << "InterfaceId " << afdxMsg->getInterfaceId() << endl;
EV_INFO << "NumChildren " << afdxMsg->getNumChildren() << endl;
EV_INFO << "PartitionId " << afdxMsg->getPartitionId() << endl;
EV_INFO << "SeqNum " << afdxMsg->getSeqNum() << endl;
EV_INFO << "UdpDestPort " << afdxMsg->getUdpDestPort() << endl;
EV_INFO << "UdpSrcPort " << afdxMsg->getUdpSrcPort() << endl;
EV_INFO << "VirtualLinkId " << afdxMsg->getVirtualLinkId() << endl;
EV_INFO << "PacketLength " << afdxMsg->getPacketLength() << endl;
{
{
obj.basequantum = afdxMsg->getBasequantum();
obj.weight = afdxMsg->getWeight();
obj.priority = afdxMsg->getPriority();
obj.cnstwtqnt = ((obj.basequantum) * (obj.weight));
obj.cal_wtqnt = 0;
obj.dfcntr = 0;
obj.pktlength = 0;
obj.buff(*afdxMsg).insert(afdxMsg);
// obj.buff().insert(afdxMsg);
queu.push_back(obj);
EV_INFO << "vector size is " << queu.size()<<endl;
EV_INFO << "Queue size is " << obj.buff(*afdxMsg).getLength()<<endl;
}
int i =1;
//while(i)
{
bool flag = false;
std::vector<wdrr>::iterator it;
for(it = queu.begin();it!= queu.end();it++)
// for(auto it:queu)
{
if(0 != (it->buff(*afdxMsg).getLength()))
{
it->cal_wtqnt = it->dfcntr + it->cnstwtqnt;
EV_INFO << endl << "1-- dfcntr is " << it->dfcntr <<endl;
EV_INFO << "cal_wtqnt is " << it->cal_wtqnt << endl;
afdx::AFDXMessage *afdxMsg1 = check_and_cast<afdx::AFDXMessage *>(it->buff(*afdxMsg).front());
EV_INFO << "Vitual id " << afdxMsg1->getVirtualLinkId()<<endl;
// while(!(it->buff.empty()))
if(false == (it->buff(*afdxMsg).empty()))
{
it->pktlength = afdxMsg1->getPacketLength();
EV_INFO << "pktlength is " << it->pktlength << endl;
if(it->cal_wtqnt >= it->pktlength)
{
it->dfcntr = it->cal_wtqnt - it->pktlength;
it->cal_wtqnt = it->dfcntr;
EV_INFO << "2-- it->cal_wtqnt is " << it->cal_wtqnt <<endl;
EV_INFO << "it->dfcntr is " << it->dfcntr<<endl;
send(msg,"out");
// afdx::AFDXMessage p = it->buff.front();
// it->buff(*afdxMsg).pop();
cMessage *msg1;
msg1 = new cMessage;
msg1 = (cMessage *)it->buff(*afdxMsg).pop();
delete msg1;
flag = true;
}
else
{
break;
}
EV_INFO<< "queue size is "<<it->buff(*afdxMsg).getLength()<< endl;
}
}
else
{
EV_INFO << endl <<"=================================Queue is empty" << endl;
}
}
if(true == flag)
{
// send(msg,"out");
// it->buff.pop();
}
}
// for(auto i=0;i<n;i++)
// {
// wt[i] = tot[i]- brusttm[i];
// tot_avg_wait_time = tot_avg_wait_time + wt[i];
// tot_avg_Trun_arnd_time = tot_avg_Trun_arnd_time + tot[i];
// }
//
// tot_avg_wait_time = (float)tot_avg_wait_time/n;
// tot_avg_Trun_arnd_time = (float)tot_avg_Trun_arnd_time/n;
//
// std::cout<< "tot_avg_wait_time " << tot_avg_wait_time << "\n" ;
// std::cout<< "tot_avg_Trun_arnd_time" << tot_avg_Trun_arnd_time << "\n" ;
}
}
}; // namespace afdx
#包括“RegulatorLogic.h”
#包括“AFDXMessage_m.h”
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
wdrr类:公共cSimpleModule
{
公众:
int basequantum;//basequantum
int priority;//队列的优先级
int-weight;//根据任务优先级分配的权重
int pktlength;//队列中接收的afdx数据的数据包长度
int cnstwtqnt;//恒定重量计数
int calwtqnt;//标定重量cnt
int-dfcntr;//修改计数器
cQueue buff(afdx::AFDXMessage);//afdx数据队列
};
wdrr类obj;
std::向量queu;
bool send_msg(无效);
名称空间afdx{
定义_模块(RegulatorLogic);
void RegulatorLogic::initialize()
{
//TODO-生成的方法体
}
void RegulatorLogic::handleMessage(cMessage*msg)
{
afdx::AFDXMessage*afdxMsg=检查和转换(msg);
EV_信息