根据omnet++文档,为了在模拟过程中更改消息的显示字符串,我必须重写名为getDisplayString()
的函数,如他们所说:
◆ getDisplayString()
virtual const char* getDisplayString()const
为消息定义显示字符串。显示字符串影响Qtenv中的消息外观。此默认实现返回“"。
所以我照他们说的做了,下面是我自定义消息的代码:
class MyMsg_Base : public ::omnetpp::cPacket
{
protected:
uint8_t M_Header = 0;
omnetpp::opp_string M_Payload;
uint8_t M_Trailer = 0;
int M_Type = 0;
private:
void copy(const MyMsg_Base& other);
protected:
bool operator==(const MyMsg_Base&) = delete;
// make assignment operator protected to force the user override it
MyMsg_Base& operator=(const MyMsg_Base& other);
public:
// make constructors protected to avoid instantiation
MyMsg_Base(const char *name=nullptr, short kind=0);
MyMsg_Base(const MyMsg_Base& other);
virtual ~MyMsg_Base();
virtual MyMsg_Base *dup() const override {return new MyMsg_Base(*this);}
virtual void parsimPack(omnetpp::cCommBuffer *b) const override;
virtual void parsimUnpack(omnetpp::cCommBuffer *b) override;
virtual uint8_t getM_Header() const;
virtual void setM_Header(uint8_t M_Header);
virtual const char * getM_Payload() const;
virtual void setM_Payload(const char * M_Payload);
virtual uint8_t getM_Trailer() const;
virtual void setM_Trailer(uint8_t M_Trailer);
virtual int getM_Type() const;
virtual void setM_Type(int M_Type);
virtual const char *getDisplayString() const override
{
EV << "ECHO" << std::endl;
return "whyyyyyyyyyyyy";
}
};
字符串
但当我模拟时,发生了:
正如你所看到的,EV << "ECHO" << std::endl;
被执行了,这意味着getDisplayString()
被成功调用了,因为我没有在项目的其他任何地方调用EV << "ECHO" << std::endl;
。
但是消息的显示字符串是“(MyMsg_Base)”,它并没有像文档中所说的那样改变,那么我做错了什么?
1条答案
按热度按时间ttvkxqim1#
这不是你在图片上看到的显示字符串。这是消息的名称。DisaString是为了改变Qtenv上消息的图形外观。(即颜色,形状等)