acceder à un vecteur dans autre classe en c++

acceder à un vecteur dans autre classe en c++ - C++ - Programmation

Marsh Posté le 24-07-2013 à 05:48:25    

      salut tout le monde !
j'ai une question sur l'héritage en c++, en fait j'ai une classe ConnectedComponent dont le code est le suivant :

Code :
  1. class ConnectedComponent
  2. {
  3. public:
  4.  ConnectedComponent();
  5.  virtual ~ConnectedComponent();
  6. private:
  7.  std::vector<std::string> m_nodes;
  8.         int  **m_edges;
  9.         int m_nodes_number;
  10. };


et une autre classe ConnectedComponentSearch.cpp où j'utilise une méthode qui a un vector< ConnectedComponent>  comme type de retour voici le code

Code :
  1. vector<ConnectedComponent> ConnectedComponentSearch::CC_calculation()
  2. {
  3. vector<bool> marked;
  4. vector<ConnectedComponent> cc_tab ;
  5. ConnectedComponent cc;
  6. vector<string> queue ;
  7. vector<string> cc_nodes ;//a vector that will have the node of a Connected Component , we will use it in the comparaison
  8. for(int i=0;i<m_vertices_number;i++)
  9.  {
  10.   queue.push_back(m_vertices.at(i));
  11.  }
  12.  for(int i=0;i<m_vertices_number;i++)
  13.  {
  14.   cout<< queue.at(i)<< endl;
  15.  }
  16.  while(!queue.empty())
  17.  {
  18.   marked=Breadth_First_Search(queue.at(0));
  19.   //cc=new ConnectedComponent();
  20.   for(int i=0;i<marked.size();i++)
  21.   {
  22.    if(marked.at(i)==true)
  23.    {
  24.     cc.m_nodes.push_back(m_vertices.at(i));
  25.     queue.erase( queue.begin() + i );
  26.    }
  27.   }
  28.   cc_tab.at(k)=cc;
  29.   k++;
  30.  }
  31.  cout<<"******The connected components in the graph*********"<<endl;
  32.  for (int i=0; i<k;i++)
  33.  {
  34. for(vector<ConnectedComponent>::size_type j = 0; j != cc_tab.size(); ++j)
  35.    {
  36.  
  37.   cout << cc_tab[i].m_nodes.at(j) << endl;
  38. }}
  39.  for(int i=0;i<maxp.size();i++)
  40.   cout<<maxp.at(i)<<"__"<<endl;
  41.  return cc_tab;
  42. }

le problème c'est q'il m'affiche une erreur au niveau d’accessibilité au vecteur m_nodes ?????
 
merci d'avance pour toute aide  
 
 


---------------
when there is a will there is a way
Reply

Marsh Posté le 24-07-2013 à 05:48:25   

Reply

Marsh Posté le 24-07-2013 à 11:10:04    

Bonjour !
 
L'attribut "m_nodes" de la classe ConnectedComponent étant déclaré "private", il n'est accessible que depuis les méthodes de la classe "ConnectedComponent" (ou les classes / fonctions amies, mais on va simplifier).
 
L'erreur est donc tout à fait logique.
 
Soit vous rendez l'attribut public (bouuuh !), soit vous rajoutez une méthode d'ajout d'un élément dans la classe ConnectedComponent (pour le premier accès); ainsi qu'une méthode d'affichage (pour le deuxième).
 
Par ailleurs, dans votre boucle d'affichage (celle sur j), vous bouclez sur la taille du tableau cc_tab et utilisez j pour parcourir le tableau cc_tab[i].m_nodes ... Exception à prévoir si ça ne rigole pas (ou dans le meilleur des cas, on n'affiche pas tout).
 
Bonne continuation !

Reply

Marsh Posté le 24-07-2013 à 11:10:46    

C'est normal : m_nodes est privé. Par définition, ce qui est hors de ta classe n'a pas le droit d'accéder aux membres privés.
 
Je ne te recommande pas pour autant nécessairement de mettre m_nodes en public. Suivant ton problème, peut-être que donner un accesseur sera censé, peut-être qu'il sera préférable d'avoir un peu plus de contrôle depuis ton interface publique et de cacher le vecteur qui relève de l'implémentation.
 
Edit :  [:benou_grilled]


Message édité par theshockwave le 24-07-2013 à 11:11:25

---------------
last.fm
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed