我有一个名为 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 as a private member 。
#include <iostream>
#include "locationdata.h"
using namespace std;
class PointTwoD
{
public:
PointTwoD();
locationdata location; // class
private:
int x;
int y;
float civIndex;
};
当我尝试在我的 main() 中实例化一个 PointTwoD 对象并使用来自 locationdata 的函数时,我收到一个错误:在非类类型 PointTwoD()() 的“test”中请求成员“location”。
#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) 我应该使用继承而不是朋友类来访问来自类 PointTwoD 的类 locationdata 的所有方法和属性吗?
第一次更新:在我将声明从 PointTwoD test() 更改为 PointTwoD test 后,我收到以下错误:'->' 的基本操作数具有非指针类型,这是什么意思以及如何解决它