我有一个名为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; // class
private:
int x;
int y;
float civIndex;
};
当我尝试在main()中实例化PointTwoD对象,并使用fromn locationdata中的函数时,我收到一个错误:在“test”中请求成员'location'是非类型的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)我应该使用继承而不是友元类来从类PointTwoD访问类locationdata的所有方法和属性吗?
第一次更新:在我将PointTwoD test()的声明更改为PointTwoD测试后,我收到以下错误:' - &gt;'的基本操作数有非指针类型,它是什么意思以及如何解决它
答案 0 :(得分:2)
这里:
PointTwoD test();
是函数声明,而不是变量定义。
你需要:
PointTwoD test;
或在C ++ 11中:
PointTwoD test{};