Semplice problema di sintassi

di il
10 risposte

Semplice problema di sintassi

Ciao ragazzi,
sto scrivendo una simulazione in c++ in cui ogni nodo della rete salva dei messaggi in delle code:
cQueue queue1;
cQueue queue2;
etc

Ogni nodo deve salvare il msg che riceve nella propria coda, quindi se per esempio il nodo 3 riceve un msg, devo richiamare: queue3.insert(msg).
Ottengo la numerazione del nodo con getName().

Il problema mio è:
Come faccio a sostituire il numero con getName()?
Ho scritto questo ma ovviamente mi da errore...

const char *id = getName();
queue[id].insert(msg);

10 Risposte

  • Re: Semplice problema di sintassi

    Com'è la definizione di queue e getName? Cos'è cQueue poi? Non è una classe standard.
  • Re: Semplice problema di sintassi

    CQueue queue; Mi permette di definire una coda e getName è un metodo così definito:
    virtual const char * getName ()
    che mi restitiusce identificato del nodo.
    Sto usando Mixim (Omnet) che è specifico per simulazioni su reti di sensori wireless.

    Grazie in anticipo per l'aiuto.
  • Re: Semplice problema di sintassi

    Cos'è cQueue? Dov'è la definizione di questa classe? Quali sono i suoi membri? E' una template che funziona su tutti i tipi di dati? Non possiamo conoscere tutte le librerie che ci sono in giro. Manda almeno un link così uno si regola. Se io ti dico sto utilizzando la classe vector so anche darti il link con la spiegazione di questa classe.
    http://www.cplusplus.com/reference/stl/vector

    Lascia stare ho trovato
    http://www.omnetpp.org/doc/omnetpp41/api/index.htm
  • Re: Semplice problema di sintassi

    Come vedi in questa classe non è definito l'operatore [] quindi non puoi usarlo così. Non vedo neanche la funzione getName in questa classe. Da dove lo ricavi sta funzione.
  • Re: Semplice problema di sintassi

    Si, so che non posso usare [], è che non so come fare a dirgli: se il tuo id è 3, allora prendi queue3 e inseriscici il msg.
    O utilizzo uno switch(getName()) o non so davvero come altro fare.
  • Re: Semplice problema di sintassi

    La funzione getName è del cObject che centra niente con il cQueue. Poi il constructor del cQueue accetta anche un char* come nome. Una soluzione anche se brutta potrebbe essere.
    
    cQueue queue1("coda1");
    cQueue queue2("coda2");
    cQueue queue3("coda3");
    
    Poi con getName() poi fare il compare del nome e non dentro lo switch che non accetta la comparazione dei char *.
    if(strcmp(getName(),"coda1") == 0)
    queue1.insert(...);
    else if ecc
    
  • Re: Semplice problema di sintassi

    GetName() mi torna l'identificato del nodo che sta operando al momento attuale, non ha a che vedere con cQueue.
  • Re: Semplice problema di sintassi

    Una soluzione + bella sarebbe quella di creare una mappa come key il nome della coda e come valore la coda stessa.
    
    std::map<std::string, cQueue> nameToQueue;
    
    cQueue queue1;
    nameToQueue["coda1"] = queue1;
    //lo puoi fare perche il cQueue ha un copy constructor.
    ....
    
    std::string name(getName());
    std::map<std::string, cQueue>::iterator it = nameToQueue.find(name);
    if(it != nameToQueue.end())
       it->second.insert(msg);
    
    così te ne fregi del nome della coda ecc. il messaggio verrà inserito nella coda giusta.
    
  • Re: Semplice problema di sintassi

    Se il tuo compilatore supoorta il C++0x puoi usare la template std::shared_ptr così la copia della coda costa niente e il dtor viene chiamato per ogni coda all'uscita del programma. la mappa diventerebbe:
    
    std::map<std::string, std::shared_ptr<cQueue>> nameToQueue;
    .....
    std::shared_ptr<cQueue> queue1 = std::make_shared<cQueue>();
    nameToQueue["coda1"] = queue1;
    
  • Re: Semplice problema di sintassi

    Grazie mille per l'aiuto prezioso!!
Devi accedere o registrarti per scrivere nel forum
10 risposte