gpt4 book ai didi

C++ 友元重载运算符 <<

转载 作者:行者123 更新时间:2023-11-30 02:38:49 25 4
gpt4 key购买 nike

我正在尝试重载运算符 << 但我一直遇到此错误。我尝试做研究但没有结果。我有一个 Point2D.h 和一个 Point2D.cpp 有一个要重载的 friend 函数。以下是我的代码:

点2D.h

#include <string>
#include <iomanip>

using namespace std;

#ifndef Point2D_H
#define Point2D_H

class Point2D
{
friend ostream& operator<< (ostream&, Point2D);

public:

Point2D();

Point2D(int, int);

protected:

int x;
int y;
};

点.cpp

#include <string>
#include <cmath>
#include <iomanip>
#include "Point2D.h"

Point2D::Point2D() {
this->x=0;
this->y=0;
}

Point2D::Point2D(int x, int y) {
this->x=x;
this->y=y;
}
ostream& operator<< (ostream &out, Point2D pt)
{
out << "Point = " <<pt.x;
return out;
}
#endif

下面是我的错误信息,不知道为什么没有匹配那个方法

Point2D.h: In function ‘std::ostream& operator<<(std::ostream&, Point2D)’:
Point2D.h:37:9: error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘int’)
out << pt.x;
^
Point2D.h:37:9: note: candidates are:
Point2D.h:35:10: note: std::ostream& operator<<(std::ostream&, Point2D)
ostream& operator<< (ostream &out, Point2D pt)
^
Point2D.h:35:10: note: no known conversion for argument 2 from ‘int’ to ‘Point2D’
In file included from Point2D.h:2:0,
from Point3D.h:2,
from Point3D.cpp:2:
/usr/include/c++/4.8/iomanip:235:5: note: template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, std::_Setw)
operator<<(basic_ostream<_CharT, _Traits>& __os, _Setw __f)

最佳答案

你需要

#include <iostream>

或者至少

#include <ostream>

另外 2 个建议:

  • 包含守卫(ifndefdefineendif)应该在 的开头和结尾header 文件(endif 不得在源文件中,而应在头文件中)
  • 在 header 中添加 using namespace std; 是不好的做法。至少在 header 中使用 std:: 前缀。您可以选择是否在源代码中使用 using namespace std;。我不会,但这是我个人的选择。

关于C++ 友元重载运算符 <<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30392277/

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