2017-01-31 3 views
0

Ich benutze Omnet ++ und schreibe den C++ - Code. Ich habe die folgende Erklärung in meiner ned Datei:in Omnet ++, C++ denkt, Variable ist eine Funktion

channel Link extends ned.DatarateChannel 
{ 
    datarate = 16Gbps; // 32 lines of 2ns clock 
    delay = 0us; 
} 

Inside my Moduls .cc Datei, ich schreibe die folgende Funktion:

void InPortAsync::getErrorTimeout(int sx, int sy, int rx, int ry, int dx, int dy, int &routerType, simtime_t &timeout) 
{ // find the flight time for packet from this node to the next joint node = TTL in queue 
    int dir0 =-1; 
    int dir1 =-1; 
    int temprx = -1; 
    int tempry = -1; 
    int outPort = -1; 
    int destRouterType, destTimeout; 
    Link* temp_Channel; 
    ... 
} 

Es ist klar, ich einen Zeiger auf ein Link-Objekt bin erklärt benannte temp_Channel. Allerdings gibt der Compiler den folgenden Fehler: ‚temp_Channel‘ wurde nicht in diesem Bereich erklärt

Warum GCC nicht meine Erklärung verstehen?

Vielen Dank im Voraus!

+4

Haben Sie vergessen, den richtigen Header für 'Link' einzubinden? Sind Sie sicher, dass der Fehler von der Zeile kommt, die Sie uns zeigen, und nicht von einer anderen? – nwp

+0

Ist es wirklich C++? – SergeyA

+1

Ich habe noch nie Omnet verwendet, aber ich denke, die NED-Datei muss verwendet werden, um eine .h-Datei zu generieren, die die Definition von Link enthält. Existiert eine solche Datei? Hast du es aufgenommen? Immer noch seltsam, dass GCC auf 'temp_Channel' statt auf' Link' drosselt. –

Antwort

4

Das Deklarieren des Link-Kanals in einer NED-Datei hat nichts mit dem C++ - Code zu tun. Es generiert KEINE Header oder C++ - Klassen, die Sie in Ihren Code aufnehmen können. Tatsächlich werden NED-Dateien nur zur Laufzeit und nicht zur Kompilierzeit verarbeitet.

+0

Ich muss auf Attribute dieser Version von DatarateChannel in einem Modul zugreifen, das damit verbunden ist, wie mache ich es ? – Liorusii

+0

Ich fand heraus, wie - ich einen Verweis auf die Vater-Klasse von Link verwendet - 'DatarateChannel' durch die c-Klasse' cDatateChannel'. Ich verstehe immer noch nicht, wie man auf den Typ von Link selbst verweist, oder ob es überhaupt in C++ existiert. – Liorusii

+0

Erweitern des 'DatateChannel' NED-Typs erstellt * nicht * eine neue C++ - Klasse. Die C++ - Klasse hinter dem 'Link'-NED-Typ ist immer noch 'cDatateChannel'. Sie können dies sehen, da "Link" das Verhalten (d. H. C++ - Implementierung) von "cDatateChannel" erbt. Wenn Sie auch neues Verhalten einführen möchten, sollten Sie die Eigenschaft '@class (MyNewClass)' verwenden, um anzugeben, welche C++ - Klasse verwendet werden soll, um das Verhalten des NED-Typs zu definieren. – Rudi

Verwandte Themen