我有一个名为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

10-06 06:43