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

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

如图:

Omnet ++ Error in Module (Node) No gate Index specified when access vector gate ‘out';_第1张图片



原因是我把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<<"基站成功给节点发送消息,节点编号"<


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





Omnet ++ Error in Module (Node) No gate Index specified when access vector gate ‘out';_第2张图片

Omnet ++ Error in Module (Node) No gate Index specified when access vector gate ‘out';_第3张图片


Omnet ++ Error in Module (Node) No gate Index specified when access vector gate ‘out';_第4张图片

Omnet ++ Error in Module (Node) No gate Index specified when access vector gate ‘out';_第5张图片


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



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

Omnet ++ Error in Module (Node) No gate Index specified when access vector gate ‘out';_第6张图片

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


Omnet ++ Error in Module (Node) No gate Index specified when access vector gate ‘out';_第7张图片


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

你可能感兴趣的:(omnet)