2010-04-24 5 views
1

J'ai cette fonction principale:erreur Fonction principale C++

#ifndef MAIN_CPP 
#define MAIN_CPP 

#include "dsets.h" 
using namespace std; 

int main(){ 
DisjointSets s; 
s.uptree.addelements(4); 
for(int i=0; i<s.uptree.size(); i++) 
     cout <<uptree.at(i) << endl; 
return 0; 
} 

#endif 

Et la classe suivante:

class DisjointSets 
    { 
public: 
void addelements(int x); 
int find(int x); 
void setunion(int x, int y); 

private: 
vector<int> uptree; 

}; 

#endif 

Ma mise en œuvre est la suivante:

void DisjointSets::addelements(int x){ 
     for(int i=0; i<x; i++) 
     uptree.push_back(-1); 


} 

//Given an int this function finds the root associated with that node. 

int DisjointSets::find(int x){ 
//need path compression 

if(uptree.at(x) < 0) 
     return x; 
else 
     return find(uptree.at(x)); 
} 

//This function reorders the uptree in order to represent the union of two 
//subtrees 
void DisjointSets::setunion(int x, int y){ 

} 

Lors de la compilation main.cpp (g ++ main.cpp)

Je reçois ting ces erreurs:

dsets.h: En fonction \ u2018int principale() \ u2019: dsets.h: 25: Erreur: \ u2018std :: vector> DisjointSets :: uptree \ u2019 est privé

principale cpp: 9: erreur: dans ce contexte

main.cpp: 9: erreur: \ u2018class std :: vector> \ u2019 n'a pas nommé membre \ u2018addelements \ u2019

dsets.h: 25: erreur : \ u2018std :: vector> DisjointSets :: uptree \ u2019 est privé

main.c pp: 10: erreur: dans ce contexte

main.cpp: 11: Erreur: \ u2018uptree \ u2019 n'a pas été déclaré dans ce champ

Je ne sais pas exactement ce qui est erroné. Toute aide serait appréciée.

+3

Vous pouvez accepter certaines réponses. – WhirlWind

+4

Il n'est pas nécessaire d'inclure des gardes (MAIN_CPP dans votre code) pour n'importe quel fichier .cpp. –

Répondre

2

Vous ne pouvez pas accéder à un élément privé d'une classe à l'extérieur de la classe. Essayez de rendre uptree public, ou fournissez un moyen d'y accéder via DisjointSets. De plus, addelements() est un membre de la classe DisjointSets, pas vector uptree.

#ifndef MAIN_CPP 
#define MAIN_CPP 

#include "dsets.h" 
using namespace std; 

int main(){ 
DisjointSets s; 
s.uptree.addelements(4); // try s.addelements(4) 
for(int i=0; i<s.uptree.size(); i++) // try making uptree public 
     cout <<uptree.at(i) << endl; 
return 0; 
} 

#endif 
1

uptree est membre privé de DisjointSets. Vous pouvez le rendre public, mais il est préférable de créer des fonctions dans DisjointSets qui fourniront la fonctionnalité que vous recherchez sans rendre les membres publics.

Questions connexes