2013-10-09 2 views
0

У меня есть 2 класса, CLASS locationdata является частным членом CLASS PointTwoD.Как получить доступ к методу класса, который является частным членом другого класса

КЛАСС 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; 

}; 

КЛАСС 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 однако я получаю сообщение об ошибке: база операнд «-> 'имеет тип non-pointer' 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 

} 

ответ

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();

Разван.

-1

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

Попробуйте

p1.get_locationdata() 

вместо

p1->get_locationdata() 
+0

На самом деле, 'p1' итератор, так что часть правильно. Проблема с другой - с 'l'. – Angew

+0

Мой плохой. Спасибо, что указали Агнью. –

Смежные вопросы