gpt4 book ai didi

c++ operator<<的多重定义

转载 作者:IT老高 更新时间:2023-10-28 12:52:47 24 4
gpt4 key购买 nike

我正在尝试覆盖 <<类的运算符。目的基本上是实现一个toString()喜欢我类(class)的行为,以便将其发送到 cout将产生有用的输出。使用一个虚拟示例,我有下面的代码。当我尝试编译时,我得到了一个愚蠢的错误:

$ g++ main.cpp Rectangle.cpp
/tmp/ccWs2n6V.o: In function `operator<<(std::basic_ostream<char, std::char_traits<char> >&, CRectangle const&)':
Rectangle.cpp:(.text+0x0): multiple definition of `operator<<(std::basic_ostream<char, std::char_traits<char> >&, CRectangle const&)'
/tmp/ccLU2LLE.o:main.cpp:(.text+0x0): first defined here

我不知道为什么会这样。我的代码如下:

矩形.h:

#include <iostream>
using namespace std;

class CRectangle {
private:
int x, y;
friend ostream& operator<<(ostream& out, const CRectangle& r);
public:
void set_values (int,int);
int area ();
};

ostream& operator<<(ostream& out, const CRectangle& r){
return out << "Rectangle: " << r.x << ", " << r.y;
}

矩形.cpp:

#include "Rectangle.h"

using namespace std;

int CRectangle::area (){
return x*y;
}

void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}

main.cpp:

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

using namespace std;

int main () {
CRectangle rect;
rect.set_values (3,4);
cout << "area: " << rect.area();
return 0;
}

最佳答案

您违反了单一定义规则。快速解决方法是:

inline ostream& operator<<(ostream& out, const CRectangle& r){
return out << "Rectangle: " << r.x << ", " << r.y;
}

其他是:

  • 在头文件中声明操作符并将实现移动到Rectangle.cpp文件中。
  • 在类定义中定义运算符。

.

class CRectangle {
private:
int x, y;
public:
void set_values (int,int);
int area ();
friend ostream& operator<<(ostream& out, const CRectangle& r){
return out << "Rectangle: " << r.x << ", " << r.y;
}
};

奖金:

  • 使用包含守卫
  • 从 header 中删除 using namespace std;

关于c++ operator<<的多重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12802536/

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