У меня есть 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
}
Это не имеет ничего общего с частным/общественным. Вы используете оператор-указатель ->
для доступа к члену класса; вы должны использовать .
вместо:
string sunType = l.get_sunType();
Это не проблема привилегий доступа, get_sunType()
уже public
.
l
не является указателем, вы можете получить доступ к нему .
оператор
Обновить:
string sunType = l->get_sunType(); // this line generates an error
// ^^
чтобы:
string sunType = l.get_sunType();
// ^
Оператор ->
не имеет реализации в locationdata. Вам нужно использовать .
оператор:
string sunType = l.get_sunType();
Разван.
В соответствии с вашим кодом, p1 не является ссылкой.
Пытаться
p1.get_locationdata()
вместо
p1->get_locationdata()
p1
является итератором, поэтому эта часть верна. Проблема с другим - сl
.