Omnet ++ Error in Module (Node) No gate Index specified when access vector gate ‘out';

来源:互联网 发布:java方法覆盖输出结果 编辑:程序博客网 时间:2024/06/06 18:54

Error in Module (Node) No gate Index specified when access vector gate ‘out';

如图:




原因是我把gate 的index和id搞混淆了。
我这里的情况是,一个基站和nodeamount个节点,在ned语言中,指定了基站有多个输入门和多个输出门,input in[];   output out[];
每个Node指定了一个输出门和多个输入门,如下: input in[];   output out;(在初始化函数里面设置好门向量的大小就好,记住要比nodeamount数字大几个,不然有时候会报错)。
但是并没有给他们之间建立连接,而是在代码中随时指定连接。


基站的类中,在out门与in门建立连接后,使用send函数,需要指定输出门的索引,不能只是简单的用send(msg,"out")就行,而是send(msg,"out",outgate->getIndex())
我这里,在获取向量门中某个具体的门的时候,是通过ID获取的,在发送消息的时候,是通过索引获取的。


而造成这个错误原因,在于发送消息时候没有使用指定out门的索引。


参考api;

const cGate* cModule::gate(int id ) const [inline];

int send (cMessage *msg, int gateid)int send (cMessage *msg, const char *gatename, int gateindex=-1)int send (cMessage *msg, cGate *outputgate)
贴下我的正确代码:

for(int i = CHANNELAMOUNT;i < NODEAMOUNT;i++){        cGate* outgate = gate("out",i); //这里获取的是id个门        Node* node = Node::nodev[i];          if(node->channelNum == -1 )              continue;          cGate* ingate = node->gate("in",0);          if((outgate)  ->isConnected())              outgate->disconnect();           outgate->connectTo(ingate);  //基站的第i个out门与节点的in门相连接           cMessage* msg = new cMessage("data");           msg->setKind(Test_Msg);           send(msg->dup(),"out",outgate->getIndex());//消息发送是按照索引发送的           cout<<"基站成功给节点发送消息,节点编号"<<i<<endl;      }


另外贴下《OMNeT++与网络仿真》中关于门的讲解,在第72页,在发送消息的时候,也可以获得那个out门的id。我这里使用的是索引。或者大家看官方api也行。











如有侵权,请留言,我把这几个图片删除。



另外在修改尝试修改这段代码的时候,陆陆续续出了一些其他问题。


这个是在Node类里面尝试使用sink给各个节点发送消息。




记录下来,希望对大家有所帮助。

原创粉丝点击