c++ omnet++中的getDisplayString()不会更改消息的显示字符串

cs7cruho  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(108)

根据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)”,它并没有像文档中所说的那样改变,那么我做错了什么?

ttvkxqim

ttvkxqim1#

这不是你在图片上看到的显示字符串。这是消息的名称。DisaString是为了改变Qtenv上消息的图形外观。(即颜色,形状等)

相关问题