まず、特定のクラス名を使用する前に、まずそれを宣言する必要があります。 Class Bが最初に宣言される前にClass Aで使用しているので、Class Bの前方宣言が必要です。
第2に、両方のクラスが定義された後に関数を定義する必要があります(これは両方のクラスの変数を使用しています - ここではfriendが機能します)。そうでなければエラーに直面するかもしれません。 put_bataは、彼らは私たちは、クラスの前方宣言があったが、下記のコードはうまく動作します場合にも定義されています前に、ロールとIDにアクセスしようとして
#include<iostream>
using namespace std;
class alpha1;
class alpha2
{
public:
void put_bata(int a,int b);
};
void alpha2 :: put_bata(int a,int b)
{
alpha1 net;
net.roll=a;
net.id=b;
net.get_data();
}
class alpha1
{
int roll;
int id;
public:
void get_data(void)
{
cout<<roll<<endl<<id<<endl;
}
friend void alpha2 :: put_bata(int a,int b);
};
int main()
{
alpha2 gamma;
gamma.put_bata(5,6);
return 0;
}
例えば
は私たちにエラーが表示されます。あなたが内部のFBのデータメンバー(& a)のAはまだ定義されていないためにアクセスすることができない問題について
#include<iostream>
using namespace std;
class alpha1;
class alpha2
{
public:
void put_bata(int a,int b);
};
class alpha1
{
int roll;
int id;
public:
void get_data(void)
{
cout<<roll<<endl<<id<<endl;
}
friend void alpha2 :: put_bata(int a,int b);
};
void alpha2 :: put_bata(int a,int b)
{
alpha1 net;
net.roll=a;
net.id=b;
net.get_data();
}
int main()
{
alpha2 gamma;
gamma.put_bata(5,6);
return 0;
}
しかし、FB(A&A)に私がa.variable、例えばA内の変数にアクセスするために使用する場合、 Aはまだ定義されていないので、違法となる。 – ipkiss
@ipkissはい。ヘッダークラス宣言の場合は、完全な定義が必要です。しかし、別のインプリメンテーションファイルで実行した場合、Aの完全な宣言を含めることができます。 – juanchopanza