Невозможно получить доступ к закрытым и общедоступным пользователям из класса друзей

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

#include <string>
#include <iostream>

using namespace std;

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();float computeCivIndex();
friend class PointTwoD;  //friend class

private:

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

};

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

#include <iostream>
#include "locationdata.h"
using namespace std;

class PointTwoD
{
public:
PointTwoD();
locationdata location; // classprivate:
int x;
int y;

float civIndex;

};

Когда я пытаюсь создать экземпляр объекта PointTwoD в своей функции main () и использовать функции из locationdata, я получаю сообщение об ошибке: запрос на член ‘location’ в «test», который не относится к типу PointTwoD () ().

#include <iostream>
#include "PointTwoD.h"using namespace std;

int main()
{
int choice;

PointTwoD test();

cout<<test.location->get_sunType; //this causes the error
}

Мои вопросы

1) Почему класс моего друга не работает, я подумал, что должен иметь возможность получить доступ ко всем свойствам, используя все функции от друга, как только он был объявлен

2) Должен ли я использовать наследование вместо друга класса для доступа ко всем методам и свойствам класса locationdata из класса PointTwoD ??

Первое ОБНОВЛЕНИЕ: После того, как я изменил объявление с PointTwoD test () на PointTwoD test, я получаю следующую ошибку: базовый операнд ‘->’ имеет тип без указателя, что это значит и как его решить

1

Решение

Это здесь:

PointTwoD test();

это объявление функции, а не определение переменной.

Тебе нужно:

PointTwoD test;

или в C ++ 11:

PointTwoD test{};

Увидеть http://en.wikipedia.org/wiki/Most_vexing_parse для получения дополнительной информации.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]