PointTwoD というフレンド クラスを持つ locationdata というクラスがあります。
#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 オブジェクトをインスタンス化しようとして、関数 fromn locationdata を使用すると、エラーが発生します: 非クラス型 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 test に変更した後、次のエラーが発生します。