【发布时间】:2021-11-11 02:30:31
【问题描述】:
我试图让一个函数被识别为friend,但我不知道我做错了什么。我尝试将内容更改为引用并将内容移入和移出命名空间和标头 cpp。我没有注意到为什么这不起作用的罪魁祸首。
我得到的错误是
error: call to deleted constructor of 'std::__1::ostream' (aka 'basic_ostream<char>')
return output;
^~~~~~
我认为这可能是一个参考问题,或者是我开始时忘记导入的问题。但我什么都想不出来。
namespace N
{
class Complex
{
public:
// Contructors
Complex(double n, double i)
{
this->number = n;
this->imaginary = i;
}
Complex()
{
this->number = 0;
this->number = 0;
}
// Accessors
friend ostream operator<< (ostream& os, const Complex& a);
// Operator Overloads
Complex operator + (Complex b)
{
Complex c;
c.number = this->number + b.number;
c.imaginary = this->imaginary + b.imaginary;
return c;
}
private:
double number;
double imaginary;
};
ostream operator<<(ostream& output, const Complex& a)
{
output << fixed << setprecision(1) << a.number << " + " << a.imaginary << "i";
return output;
}
}
【问题讨论】:
-
注意:现在错误是“调用 std::__1::ostream 的已删除构造函数”
-
哦,不知道这意味着什么。感谢您的知识
-
更改问题标题是不够的。标题应该总结问题,并且错误消息中的信息比摘要中的信息要多。整个错误消息应该被逐字复制到问题正文中(因为我冒昧地演示了——但我没有留下行号和字符位置;通常将这些留在粘贴中)。请注意,错误消息通常占用不止一行。在这种情况下,第二行和第三行会准确指出检测到错误的位置,而无需计算行数和字符位置。
标签: c++ class c++11 operator-overloading friend