You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OMNeT++重写getDisplayString()后消息显示字符串未更改求助

问题描述

按照OMNeT++官方文档要求,在自定义消息基类MyMsg_Base中重写了getDisplayString()函数,仿真时EV输出的"ECHO"正常打印,说明函数已被调用,但消息显示字符串仍为(MyMsg_Base)未更改。相关代码如下:

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";

    }
};
解决方法

出现这个问题的核心原因有两个,对应解决方式如下:

1. 修正显示字符串格式

OMNeT++的getDisplayString()返回的是属性化配置字符串,而非直接的显示文本。如果要自定义消息显示的文本内容,需要使用label=前缀来指定标签内容。修改重写的函数:

virtual const char *getDisplayString() const override
{
    EV << "ECHO" << std::endl;
    return "label=whyyyyyyyyyyyy";
}

2. 调整模块的可视化配置

默认情况下,OMNeT++的模块(如队列、交换机)或传输链路会优先显示消息的类名/名称,而非消息自身的getDisplayString()返回值。需要在NED文件中修改对应模块的display属性,让它引用消息的显示字符串:

// 以自定义队列模块为例
simple MyQueue extends Queue {
    display="messages=$displayString";
}

此外,也可以在Qtenv仿真界面中右键点击消息,选择Display Options,确认是否勾选了"Use Display String"相关选项,确保界面优先使用消息的自定义显示配置。


内容的提问来源于stack exchange,提问作者abdo Salm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:43:29