オペレーターをオーバーロードしようとすると、エラーが発生しました。
私のヘッダーファイル:
#include<iostream>
#include<string>
using namespace std;
#ifndef HALLGATO_H
#define HALLGATO_H
class Hallgato {
private:
char* nev;
char* EHA;
int h_azon;
unsigned int kepesseg;
public:
friend ostream& operator<<(ostream& output, const Hallgato& H);
};
#endif
私のcppファイル:
#include<iostream>
#include "Hallgato.h"
using namespace std;
ostream& Hallgato::operator<<(ostream& output, const Hallgato& H) {
output << "Nev: " << H.nev << " EHA: " << H.EHA << " Azonosito: " << H.h_azon << " Kepesseg: " << H.kepesseg << endl;
return output;
}
};
.cppファイルで、オーバーロードされた演算子<<
を定義するときに、エラーが発生しました。どうして?
オペレーターはクラスのメンバーではなく、友達なので
ostream& Hallgato::operator<<(ostream& output, const Hallgato& H) {
する必要があります
ostream& operator<<(ostream& output, const Hallgato& H) {
また、他のファイルの演算子を使用できるようにするには、ヘッダーファイルにプロトタイプを追加する必要があります。
ヘッダーファイルはこれになります
hallgato.h
#ifndef HALLGATO_H
#define HALLGATO_H
#include<iostream>
#include<string>
class Hallgato {
private:
char* nev;
char* EHA;
int h_azon;
unsigned int kepesseg;
public:
friend std::ostream& operator<<(std::ostream& output, const Hallgato& H);
};
std::ostream& operator<<(std::ostream& output, const Hallgato& H);
#endif /* End of HALLGATO_H */
".cpp"ファイルのどこかに演算子関数を実装しますが、ヘッダーファイルでも実行できますが、一部のコンパイラーで頻繁に再コンパイルする必要があります。
hallgato.cpp
#include "hallgato.h"
std::ostream& operator<<(std::ostream& output, const Hallgato& H)
{
/* Some operator logic here */
}
注:ヘッダーファイルを変更すると、通常、多くのコンパイラはそれらを.cpp
ファイルに再インクルードしません。これは、不要な再コンパイルを回避するために行われます。強制的に再インクルードするには、それらのヘッダーを含むソースファイルにいくつかの変更(空の行を削除)を行うか、コンパイラ/ IDEで強制的に再コンパイルする必要があります。
ヘッダーファイルで、クラスのフレンドメソッドを宣言しました
friend ostream& operator<<(ostream& output, const Hallgato& H);
このメソッドは、Hallgato::
なしで(cppで)定義する必要があります
ostream& operator<<(ostream& output, const Hallgato& H)
このメソッドはハルガトクラスの一部ではないためです。