私には2つのクラスがあります。1つと2つで、それぞれが他のクラスへのポインターを持つフレンドメンバー関数を持っています。最初のヘッダーファイルは次のとおりです。
#ifndef FIRSTCLASS_H
#define FIRSTCLASS_H
class two;
class one {
private:
int one_data;
public:
friend void second_data (two *);
};
#endif
2番目のヘッダーファイルは次のようになります。
#ifndef SECONDCLASS_H
#define SECONDCLASS_H
class one;
class two {
private:
int two_data;
public:
friend void first_data (one *);
};
#endif
実際の関数は、3番目の.cppファイルにあります。適切なクラス修飾子を使用して関数を記述しましたが、コンパイルエラーが発生します。私はg++を使用しています。機能は次のとおりです。
#include "firstclass.h"
#include "secondclass.h"
void two::first_data (one * class1) {
}
void one::second_data (two * class2) {
}
エラーは次のとおりです。
error:no ‘void two::first_data (one*)’ member function declared in class ‘two’
error: no ‘void one::second_data(two*)’ member function declared in class ‘one’
関数名の前にクラス修飾子をドロップすると、コードがコンパイルされます。変更された機能は次のとおりです。
void first_data(one * class1) {
}
void second_data(two * class2) {
}
私はC++を初めて使用しますが、最初のケースで何か間違ったことをしているのかどうかわかりません。教えてください。