我有一个名为locationdata的类,它有一个名为PointTwoD的 friend 类
#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作为私有(private)成员。
#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)为什么我的 friend 类不能正常工作,我认为我应该能够在声明了 friend 的所有属性后使用所有函数
2)我应该使用继承而不是 friend 类从PointTwoD类访问class locationdata的所有方法和属性吗?
第一次更新:将声明从PointTwoD test()更改为PointTwoD test之后,出现以下错误:'->'的基本操作数具有非指针类型,这是什么意思,以及如何解决它
最佳答案
这里:PointTwoD test();
是函数声明,而不是变量定义。
你需要:PointTwoD test;
或在C++ 11中:PointTwoD test{};
有关更多信息,请参见http://en.wikipedia.org/wiki/Most_vexing_parse。