gpt4 book ai didi

c++ - 重载 cout 时 undefined reference

转载 作者:行者123 更新时间:2023-11-28 03:03:47 25 4
gpt4 key购买 nike

我已经使用 dev c++ 定义了一个点类。然后我试图为这个类重载 cout 。虽然不使用它,但我没有收到任何错误。但是当我在 main 中使用它时,它给了我这个错误:

[Linker error] C:\Users\Mohammad\Desktop\AP-New folder\point/main.cpp:12: undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Point const&)' 

//点.h

    class Point{
private:
double x;
double y;
double z;
public:

//constructors:
Point()
{
x=0;
y=0;
z=0;
}
Point(double xx,double yy,double zz){x=xx; y=yy; z=zz;}

//get:
double get_x(){return x;}
double get_y(){return y;}
double get_z(){return z;}

//set:
void set_point(double xx, double yy, double zz){x=xx; y=yy; z=zz;}

friend ostream &operator<<(ostream&,Point&);

};

    //point.cpp
ostream &operator<<(ostream &out,Point &p){
out<<"("<<p.x<<", "<<p.y<<", "<<p.z<<")\n";
return out;

// main.cpp

    #include <iostream>
#include "point.h"

using namespace std;

int main(){

Point O;
cout<<"O"<<O;


cin.get();
return 0;

}

最佳答案

这是因为在声明和定义运算符时,您没有将 Point 设为 const。按如下方式更改您的声明:

friend ostream &operator<<(ostream&, const Point&);

同时在定义中加入const:

ostream &operator<<(ostream &out, const Point &p){
out<<"("<<p.x<<", "<<p.y<<", "<<p.z<<")\n";
return out;
}

请注意,您发布的代码不需要 Point&const 特性。其他一些代码使您的编译器或 IDE 认为引用了带有 const 的运算符。例如,像这样使用运算符需要 const

cout << Point(1.2, 3.4, 5.6) << endl;

(demo)

由于上面的代码片段创建了一个临时对象,因此 C++ 标准禁止将对它的引用作为非常量传递。

与此问题没有直接关系,但您可能还想为各个坐标 const 标记三个 getter:

double get_x() const {return x;}
double get_y() const {return y;}
double get_z() const {return z;}

这将允许您使用标记为 const 的对象上的 getter 访问坐标。

关于c++ - 重载 cout 时 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20161216/

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