У меня есть класс с именем 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, я получаю следующую ошибку: базовый операнд ‘->’ имеет тип без указателя, что это значит и как его решить
Это здесь:
PointTwoD test();
это объявление функции, а не определение переменной.
Тебе нужно:
PointTwoD test;
или в C ++ 11:
PointTwoD test{};
Увидеть http://en.wikipedia.org/wiki/Most_vexing_parse для получения дополнительной информации.
Других решений пока нет …