gpt4 book ai didi

c++ - 运算符重载代码编译错误,模板参数推导/替换失败

转载 作者:行者123 更新时间:2023-11-28 02:30:53 26 4
gpt4 key购买 nike

我正在尝试应用我在以下 C++ 类(class)中学到的一些运算符加载概念。

#include<iostream>
using namespace std;

class Point
{
private:
int x, y;
public:
Point(int, int);
Point operator+(const Point&);
friend istream& operator>>(istream& in, Point&);
friend ostream& operator<<(ostream& out, Point&);
Point operator=(const Point&);
};

Point::Point(int x = 0, int y = 0)
:x(x), y(y){}

Point Point::operator+(const Point& p)
{
int r1, r2;
r1 = x + p.x;
r2 = y + p.y;
return Point(r1, r2);
}

Point Point::operator=(const Point& p)
{
this->x = p.x;
this->y = p.y;
return *this;
}

istream& operator>>(istream& in, Point& p)
{
char openParenthesis, closeParenthesis, comma;
cout << "Enter data in the format (1,2): ";
in >> openParenthesis >> p.x >> comma >> p.y >> closeParenthesis;
return in;
}

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

int main()
{
Point a, b;
cin >> a >> b;

cout << "a + b is: " << a + b << endl;
return 0;
}

代码在 Visual Studio 上编译和运行良好。但是当我尝试在 Linux 上使用 gcc 编译它时,它会抛出一长串错误:

In file included from /usr/include/c++/4.8/iostream:39:0, from optr_overload.cpp:1: /usr/include/c++/4.8/ostream:471:5: note: template std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, _CharT) operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c) ^ /usr/include/c++/4.8/ostream:471:5: note: template argument deduction/substitution failed: optr_overload.cpp:53:30: note:
deduced conflicting types for parameter ‘_CharT’ (‘char’ and ‘Point’) cout << "a + b is: " << a + b << endl;

我知道问题出在我将“a + b”传递给重载二进制流插入运算符的那一行,它只接收对一个 Point 对象的引用作为参数。但是除了将“a + b”分配给第三个对象并将该单个对象作为参数传递给“<<”之外,我不知道如何修复代码。有人可以向我解释到底需要做什么才能让 gcc 编译我的代码,最好不涉及使用额外的占位符对象。

最佳答案

a + b 计算的值是临时对象,因此不能作为 Point& 传递至 operator<< ;该语言只允许临时对象作为 const Point& 传递反而。只需更改输出运算符的声明以接受 const Point& .

允许将临时结果作为非常量引用传递是旧版本 VC++ 中的一个已知错误。

关于c++ - 运算符重载代码编译错误,模板参数推导/替换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29046124/

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