gpt4 book ai didi

c++ - 在类外定义重载的外流运算符

转载 作者:太空宇宙 更新时间:2023-11-04 15:18:34 27 4
gpt4 key购买 nike

这是我写的一些简单代码。它只是复制一个对象并使用重载运算符显示它的数据函数。

      //Base
#include<iostream>
#include<istream>
#include<ostream>
using std::ostream;
using std::istream;
using namespace std;

class Sphere{
public:

Sphere(double Rad = 0.00, double Pi = 3.141592);


~Sphere();




Sphere(const Sphere& cSphere)

//overloaded output operator
friend ostream& operator<<(ostream& out, Sphere &fSphere);


//member function prototypes
double Volume();
double SurfaceArea();
double Circumference();

protected:
double dRad;
double dPi;
};


//defining the overloaded ostream operator
ostream& operator<<(ostream& out, Sphere& fSphere){
out << "Volume: " << fSphere.Volume() << '\n'
<< "Surface Area: " << fSphere.SurfaceArea() << '\n'
<< "Circumference: " << fSphere.Circumference() << endl;
return out;
}

成员函数在 .cpp 文件中定义。问题是当我编译这个程序时,我被告知

 there are multiple definitions of operator<<(ostream& out, Sphere& fSphere)

这很奇怪,因为 outstream 运算符是一个非成员函数,所以它应该能够在类之外定义。然而,当我在类中定义此运算符时,该程序运行良好。怎么回事?

最佳答案

您似乎在头文件中定义了运算符,并将此头文件包含在多个 cpp 模块中。或者您在另一个 cpp 模块中包含一个带有函数定义的 cpp 模块。通常错误信息会显示一个函数在哪里被多重定义。所以重新阅读错误信息的所有行

考虑到最好将运算符声明为

ostream& operator<<(ostream& out, const Sphere &fSphere);

关于c++ - 在类外定义重载的外流运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25466221/

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