当我试图重载操作符时,我收到了错误。
我的标题文件:
#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文件中,当我想定义重载的运算符<<
时,我收到了一个错误。为什么呢?
答案 0 :(得分:4)
运营商不是班级成员,而是朋友
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中。
答案 1 :(得分:0)
在头文件中,您声明了类
的友方方法friend ostream& operator<<(ostream& output, const Hallgato& H);
这个方法应该在没有Hallgato::
ostream& operator<<(ostream& output, const Hallgato& H)
因为此方法不属于Hallgato类。