Как получить доступ к методу класса, который является закрытым членом другого класса

0

У меня есть 2 класса, CLASS locationdata является частным членом CLASS PointTwoD.

Данные местоположения CLASS

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, но я получаю сообщение об ошибке: базовый операнд '->' имеет не указательный тип 'locationdata'

Вот как я обращаюсь к частным членам

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

}
Теги:
class
pointers
linked-list
debugging

4 ответа

2
Лучший ответ

Это не имеет ничего общего с частным/общественным. Вы используете оператор-указатель -> для доступа к члену класса; вы должны использовать . вместо:

string sunType = l.get_sunType();
2

Это не проблема привилегий доступа, get_sunType() уже public.

l не является указателем, вы можете получить доступ к нему . оператор

Обновить:

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

чтобы:

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

Оператор -> не имеет реализации в locationdata. Вам нужно использовать . оператор:

string sunType = l.get_sunType();

Разван.

-2

В соответствии с вашим кодом, p1 не является ссылкой.

Пытаться

p1.get_locationdata()

вместо

p1->get_locationdata()
  • 0
    На самом деле, p1 является итератором, поэтому эта часть верна. Проблема с другим - с l .
  • 0
    Виноват. Спасибо за указание на Агнью.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню