2016-03-21 11 views
0

typenid ist eine Struktur, die in einer Klasse-Warteschlange definiert ist, Queue.hSpeicherung struct Variablen von Funktion zu lokalem struct variable

struct typenid{ 
    typenid() : src_type(0), src_id(0){} 
    uint32_t src_type; 
    uint32_t src_id; 
    } node_details; 

Das Folgende ist eine Art von Klasse in meinem ereignisgesteuerten Simulator.

class FindNextHopEvent : public event { 
    public: 
    FindNextHopEvent(double time, Packet *packet, Queue::typenid node_details); 
    ~FindNextHopEvent(); 
    void process_event(); 
    Packet *packet; 
    Queue::typenid local_node_details; // should get the value of node_details 
}; 

Ich möchte die node_details Struktur innerhalb process_event() verwenden, aber ich will es nicht als Parameter übergeben werden (aufgrund verschiedener Grund). Gibt es eine Möglichkeit für local_node_details (eine Struktur ähnlich wie node_details), den Wert von node_details zu erfassen, damit ich in process_event() darauf zugreifen kann? Wenn ja, wie kann ich es tun? Wenn ich local_node_details als Zeiger deklariere, kann ich den "this" -Operator verwenden, aber für Strukturen, wie kann ich das tun.

So sieht meine aktuelle Definition aus.

FindNextHopEvent::FindNextHopEvent(
    double time, 
    Packet *packet, 
    Queue::typenid node_details 
    ): event(NEXT_HOP_EVENT, time) { 
this->packet = packet; 
Queue::typenid local_node_details= node_details; 
} 

Jede Hilfe wird sehr geschätzt.

+0

Was genau ist das Problem mit der Implementierung Sie jetzt, wo Sie passieren ' node_details' zum ctor und dann in die Membervariable kopieren? Sie können bereits 'local_node_detail' in' process_event() 'aufrufen. – JBL

+0

Inwiefern funktioniert die aktuelle Definition nicht? –

+0

local_node_details hat nicht denselben Wert wie node_details – user2532296

Antwort

1

Es gibt einen Weg, Referenzen zu verwenden. Übergeben Sie eine Referenz auf die Struktur an den FindNextHopEvent Konstruktor statt, und stellen Sie Ihre local_node_details Struktur eine Referenz sein, dann können Sie es tun:

class FindNextHopEvent : public event { 
    Queue::typenid& local_node_details; 
    //   ^
    //   | 
    // Note use of ampersand to make it a reference 

    ... 
}; 

... 

//    Note use of ampersand to make it a reference 
//               | 
//               v 
FindNextHopEvent(double time, Packet *packet, Queue::typenid& node_details) 
    // Use constructor initializer list to initialize references 
    : ..., local_node_details(node_details) 
{ ... } 
+0

Danke für deine Antwort. Aber selbst jetzt, wenn ich versuche, von process_event() auf local_node_details zuzugreifen, bekomme ich immer noch nicht die richtigen Werte. Irgendwelche Ideen ? – user2532296

+0

Um genauer zu sein, hat das Drucken von local_node_details.dst_type im Konstruktor den richtigen Wert. Aber wenn ich dasselbe im Prozessereignis drucke, zeigt es einen anderen Wert an. – user2532296

+0

@ user2532296 Übergeben Sie einen Verweis auf die richtige Struktur an den Konstruktor? –