【发布时间】:2020-09-06 09:05:57
【问题描述】:
所以我正在为复数编写一个类,并在我编写的头文件中重载
friend std::ostream& operator<< (std::ostream& out, Complex& a);
我后来在其他文件中定义的
std::ostream& operator<< (std::ostream& out, Complex& a)
{
out << a.real << " + " << a.imaginary << "*i";
return out;
}
它告诉我不能访问一个类的私有成员,尽管我将它声明为友元函数。另外,我得到这个错误“'ostream'不是'std'的成员”。 我该怎么办?
【问题讨论】:
-
您是
#include <ostream>还是#include <iostream>?此外,您的第二个参数应该是对 const 的引用。 -
好的,现在它没有给我关于“ostream”的错误,但它仍然不允许我访问类的成员。
-
在定义
operator<<()之前,编译器需要对类定义和std::ostream都有可见性(例如,通过包含适当的标头)。这通常意味着需要在定义(实现)该函数之前包含具有类定义和<iostream>的标头。编译器不会尝试推断它看不到的定义。
标签: c++ class oop operator-overloading std