gpt4 book ai didi

c++ - 头文件和 cpp 文件中的运算符重载

转载 作者:太空狗 更新时间:2023-10-29 20:09:22 25 4
gpt4 key购买 nike

当我尝试重载运算符时出现错误。

我的头文件:

#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 文件中,当我想定义重载运算符时 << ,我得到一个错误。为什么?

最佳答案

运算符不是类的成员,是 friend so

 ostream& Hallgato::operator<<(ostream& output, const Hallgato& H) {

应该是

 ostream& operator<<(ostream& output, const Hallgato& H) {

同时为了能够使用来自其他文件的运算符,您应该将原型(prototype)添加到头文件中。

头文件会变成这样

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 文件中。这样做是为了避免不必要的重新编译。要强制重新包含,您必须对包含这些 header 的源文件进行一些修改(删除空行)或在您的编译器/IDE 中强制重新编译。

关于c++ - 头文件和 cpp 文件中的运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47083328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com