如何访问作为另一个类的私有成员的类的方法

时间:2013-10-09 08:25:35

标签: c++ class debugging pointers linked-list

我有2个类,CLASS locationdata是CLASS PointTwoD的私有成员。

CLASS locationdata

class locationdata
{
  public:
  locationdata(); //default constructor
  locationdata(string,int,int,float,float); //constructor

 //setter
 void set_sunType(string);
 void set_noOfEarthLikePlanets(int);
 void set_noOfEarthLikeMoons(int);
 void set_aveParticulateDensity(float);
 void set_avePlasmaDensity(float);

 //getter 
 string get_sunType();
 int get_noOfEarthLikePlanets();
 int get_noOfEarthLikeMoons();
 float get_aveParticulateDensity();
 float get_avePlasmaDensity();


 static float computeCivIndex(string,int,int,float,float);
 friend class PointTwoD;

private:

  string sunType;
  int noOfEarthLikePlanets;
  int noOfEarthLikeMoons;
  float aveParticulateDensity;
  float avePlasmaDensity;

};

CLASS PointTwoD

  class PointTwoD
{
  public:
  PointTwoD();
  PointTwoD(int, int ,locationdata);

  void set_x(int);
  int get_x();

  void set_y(int);
  int get_y();

  void set_civIndex(float);
  float get_civIndex();

  locationdata get_locationdata();



  bool operator<(const PointTwoD& other) const
 {
  return civIndex < other.civIndex;
 }

  friend class MissionPlan;

private:
  int x;
  int y;
  float civIndex;
  locationdata l;

};

在我的主要方法中,我试图访问locationdata的私有成员但是我收到一个错误:&#39; - &gt;&#39;的基本操作数有非指针类型&#39; locationdata&#39;

这就是我访问私人会员的方式

int main()
{
   list<PointTwoD>::iterator p1 = test.begin();
   p1 = test.begin();

  locationdata l = p1 ->get_locationdata();
  string sunType = l->get_sunType(); // this line generates an error

}

4 个答案:

答案 0 :(得分:2)

这不是访问权限问题,get_sunType()已经public

l不是指针,您可以通过.运算符

访问它

更新

 string sunType = l->get_sunType(); // this line generates an error
 //                ^^

为:

 string sunType = l.get_sunType(); 
 //                ^

答案 1 :(得分:2)

这与私人/公众无关。您正在使用指针访问运算符->来访问类的成员;您应该使用.代替:

string sunType = l.get_sunType();

答案 2 :(得分:1)

运营商->在locationdata中没有实施。 您需要使用.运算符:

string sunType = l.get_sunType();

勒兹。

答案 3 :(得分:-1)

根据您的代码,p1不是参考。

尝试

p1.get_locationdata()

而不是

p1->get_locationdata()