Пример: отладка в OMNeT ++

спросил: 28 марта 2018 в 04:01 в: c++

Я знаю, это может быть много, чтобы спросить, но может ли кто-нибудь помочь мне отладить этот код:

#include <stdio.h>
#include <string.h>
#include <omnetpp.h>using namespace omnetpp;class Node : public cSimpleModule
{
  private:
    cMessage *out_msg;    long no_sent = 0;
    long no_rcvd = 0;
    cOutVector rcvdRecord;
    cLongHistogram Statistics;  public:
    Node();
    virtual ~Node();  protected:
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;
    virtual void finish() override;
};Define_Module(Node);Node::Node()
{
    out_msg = nullptr;
}Node::~Node()
{
    delete out_msg;
}void Node::initialize()
{
    out_msg = nullptr;    if (strcmp("sender", getName()) == 0) {
        EV << "Scheduling first send to t=5.0s\n";
        scheduleAt(5.0, out_msg);
        out_msg = new cMessage("Sending Message");
    }
}void Node::handleMessage(cMessage *msg)
{
    if (msg == out_msg) {
        EV << "Sending message to receiver\n";
        send(out_msg, "out");
        out_msg = nullptr;
        no_sent++;        simtime_t delay = par("delayTime");
        scheduleAt(simTime() + delay, out_msg);
    }        else {
            out_msg = msg;
            no_rcvd++;
            rcvdRecord.record(out_msg);
            Statistics.collect(out_msg); //what's going on here ?
    }
}void Node::finish()
{
    EV << "Sent:     " << no_sent << endl;
    EV << "Received: " << no_rcvd << endl;
    EV << "Messages sent, mean:   " << Statistics.getMean() << endl;
    EV << "Messages sent, standard deviation: " << Statistics.getStddev() << endl;
    EV << "Messages sent, variance: " << Statistics.getVariance() << endl;
    recordScalar("#sent", no_sent);
    recordScalar("#received", no_rcvd);
    Statistics.recordAs("Message Statistics");
}

Появляется следующее сообщение об ошибке:

Exercise2.cc:66:38: ошибка: нет соответствующей функции для вызова to'omnetpp :: cOutVector :: record (omnetpp :: cMessage &) '

Exercise2.cc:67 : 39: error: нет соответствующей функции для вызова to'omnetpp :: cLongHistogram :: collect (omnetpp :: cMessage &) '

Поэтому я действительно не знаю, что это такое должен сказать мне. Не являются ли эти встроенные функции частью cOutVector или cLongHistogram?

1 ответ

Есть решение
Attila ответил: 29 марта 2018 в 08:54

Разве эти встроенные функции не являются частью классов cOutVector или cLongHistogram соответственно?

Они не ' т. Ну, cOutVector имеет функцию-член с именем record, она просто не может принять cMessage * в качестве аргумента, так что специфично Функция overload , которую вы хотели использовать, не существует. То же самое с cLongHistogram и collect.

Просто взгляните на документацию:

Объект cOutVector может написать удваивается до выходного векторного файла ...

И, между прочим, что именно вы ожидаете увидеть как"гистограмму" Сообщения"? : D Мне приходит в голову этот комикс ...

Для записи сообщений (не в cOutVector) вы можете включить ведение журнала событий. Полученный файл можно визуализировать с помощью инструмента "Диаграмма последовательности" в среде IDE, см. Https://docs.omnetpp.org/tutorials/tictoc/part2/#25-visualizing-on-a-sequence-chart

Attila ответил: 29 марта 2018 в 08:56
Или для записи какого-либо свойства (длины, вида, члена данных, связанных, но отдельно вычисляемых метрик или аналогичных) сообщений, используйте соответствующую функцию получения или попробуйте записать связанную переменную, чтобы получить и записать сам интересный показатель, а не просто сообщение.
user9158336 ответил: 30 марта 2018 в 10:03
спасибо мужчина! - Вы правы, гистограмма сообщений вообще не имеет смысла .. В некотором роде просто пытаюсь что-то сделать, чтобы привыкнуть к этому инструменту.