主要功能错误C ++

时间:2010-04-24 03:25:01

标签: c++ compiler-construction main

我有这个主要功能:

#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

以下课程:

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

private:
vector<int> uptree;

};

#endif

我的实现是:

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){

}

编译main.cpp(g ++ main.cpp)

我收到了这些错误:

dsets.h:在函数\ u2018int main()\ u2019中:    dsets.h:25:错误:\ u2018std :: vector&gt; DisjointSets :: uptree \ u2019是私有的

main.cpp:9:错误:在此上下文中

main.cpp:9:错误:\ u2018class std :: vector&gt; \ u2019没有名为\ u2018addelements \ u2019的成员

dsets.h:25:错误:\ u2018std :: vector&gt; DisjointSets :: uptree \ u2019是私有的

main.cpp:10:错误:在此上下文中

main.cpp:11:错误:\ u2018uptree \ u2019未在此范围内声明

我不确定到底有什么不对。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您无法从类外部访问类的私有元素。尝试将uptree公开,或提供通过DisjointSets访问它的方法。此外,addelements()是DisjointSets类的成员,而不是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 :(得分:1)

uptreeDisjointSets的私人成员。您可以将其公开,但最好在DisjointSets中创建函数,这些函数将提供您所寻求的功能,而不会将成员公开。