1

我有一个名为 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 后,我​​收到以下错误:'->' 的基本操作数具有非指针类型,这是什么意思以及如何解决它

4

1 回答 1

2

这里:

PointTwoD test();

是函数声明,而不是变量定义。

你需要:

PointTwoD test;

或在 C++11 中:

PointTwoD test{};

有关更多信息,请参阅http://en.wikipedia.org/wiki/Most_vexing_parse

于 2013-10-05T01:09:32.833 回答