Salve,
ho realizzato un grafo. In questa struttura manca la funzione merge il cui protototipo è
il seguente:
codice:
void merge(MGraph grafo);
Il problema di questa funzione è che l'instanza di MGraph che invoca questo metodo deve poter prendere le informazioni memorizzate all'intero del'istanza di MGraph presa come parametro. La soluzione più ovvia a questo problema sarebbe usare 'friend', ma una classe, a quanto ho capito dal mio compilatore, non può essere friend di se stessa.
Come si può risolvere questo problema?
di seguito la classe MGraph affinchè possiate contestualizzare il problema:
codice:
/*
    Questa classe implementa la struttura grafo(non-)orientato realizzato mediante matrice di
   adiacenza
    Il puntatore a puntatore Matrix rappresenta la matrice di adiacenza nella quale sono memorizzati
   gli archi
    Il puntatore AVertex rappresenta il vettore in cui sono memorizzate le informazioni sui 
   vettori
    La variabile size indica la dimensione reale del vettore e della matrice
    La variabile Vsize indica il numero di vertici presenti nel grafo
    La variabile Asize indica il numero di archi presenti nel grafo
    Il valore booleano oriented indica se il grafo è orientato o meno
    AType e VType indicano rispettivamente il tipo di valore dell'arco è il valore del vertice
    MArc e MVertex sono rispettivamente il nodo-arco e il nodo-vertice    
*/
template<class AType, class VType>
class MGraph: public Graph<AType,VType>{
      private:     
      MArc<AType>      ** Matrix;
      MVertex<VType>    * AVertex;
      
      int  size;
      int Vsize;
      int Asize;
      
      bool oriented;        
      
      int getPos(VType v);
      public:
      MGraph(bool orientation);
      ~MGraph();
                   
      bool isEmpty();
      int    getNumArc();
      int    getNumVertex();
      bool   isAdjacent(VType vert1, VType vert2);
      void   insertVertex(VType vert);
      void   insertArc(VType vert1,VType vert2,AType arc);
      void   removeVertex(VType vert);
      void   removeArc(VType vert1,VType vert2);      
};
Grazie!